お世話になっております。

fsockopenを使って、証明書付きのSSL通信をして表示内容を取得したいのです。

いろいろ見て回って、下記のようなソースを作りました。

------------------------------------------------------------------------
$context = stream_context_create();
stream_context_set_option($context, 'ssl', 'local_cert', './client.pem');
stream_context_set_option($context, 'ssl', 'cafile', './ca.pem');

$host = "aaa.bbb.ne.jp";
$fp = fsockopen("ssl://{$host}", 443, $errno, $errstr, 10, $context);
------------------------------------------------------------------------

すると、

Warning: fsockopen() expects at most 5 parameters, 6 given

と怒られます。fsockopenに6つ目のパラメータは渡せないってことですよね?

仕方がないので、
$contextをはずしてみると、当然証明ができないので怒られます。

Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
error:14094410:SSL routines:func(148):reason(1040) in xxxxxxx~

Warning: fsockopen(): Failed to enable crypto in xxxxxxx~

Warning: fsockopen(): unable to connect to ssl://aaa.bbb.ne.jp:443 (Unknown error) in xxxxxxx~





まる一日解決方法を探し続けているのですが、だめです。

漠然とした内容で申し訳ありませんが、どなたかご教授願えませんでしょうか。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (6件)

幾つかの pem ファイルを指定していることから、SSL クライアント認証が必要なサーバにアクセスしてコンテンツを得たいということですよね?



ソケットを開いて openssl関数を駆使して自前で頑張るのもアリですが、参照URLのとおり面倒なネゴシエーションをしなくてはなりません。
頑張って実装してください。。

って面倒ですよね。もし cURL extension が利用できるのであれば以下のソースが参考になるかもしれません。手元にすぐにSSLクライアント認証が試せる環境がなかったので動作は未検証になります。

<?php
if( function_exists( 'curl_init' ) === FALSE ) {
die( 'cURL 使えないッス!' );
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'aaa.bbb.ne.jp');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // コンテンツはテキスト文字列
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_CAPATH, 'client.pem のあるディレクトリを指定');
curl_setopt($ch, CURLOPT_CAINFO, 'ca.pem をフルパス指定');
curl_setopt($ch, CURLOPT_SSLCERT, 'client.pem');
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, 'client.pem のパスワードを指定');

// CURLOPT_RETURNTRANSFER を 1 にしているのでresponse body を変数に格納
$result = curl_exec($ch);
curl_close($ch);
echo $result .PHP_EOL
exit;

参考URL:http://alk.dip.jp/apache2-default/sv290.html
    • good
    • 0
この回答へのお礼

ありがとうございます。

ご丁寧にサンプルまで。。。(泣)

curlが使えない状態だったので、PHPのリコンパイルして使えるようになったのですが、

実行しても、実行中のまま変化なしでした。

どうもpfxから変換したpemが怪しいような気がしてきました。

中身が理解できてなくて、コピペだからうまくいかないんですよね。

参考URLなど勉強してもうちょっとがんばってみます。

ありがとうございます。

お礼日時:2010/12/22 11:01

hogehoge78 さんの Zend Framework 簡単でいいですね。


Zend Framework はコンポーネントを単体でライブラリのように使えると聞いたことがあります。#使ったことがないのでわかりません。
導入するのに抵抗がないのであれば HTTP ヘッダをパースしてクッキーにセットしてなど雑多な処理から開放されそうです。

質問者の方の補足の質問ですが、人間がブラウザを利用して操作する事をトレースするわけですから、 curl_init() をリクエスト回数分コールすることになりそうです。

設定したオプションを再利用したいのであれば curl_setopt_array() や curl_copy_handle() があるようですので関数やオブジェクトのメソッドでラッピングして使うと便利そうですね。

先のZend_Http_Clientを使う案も素敵だと思います。

#Webアプリケーションなんでしょうか?だとしたら本来各ブラウザで分散される処理を一手に引き受けるのですからアクセス数によってはCPUぶん回しになりそうですね。接続先はSSLアクセラレータが使えるかもしれませんが、クライアントの振舞いをする側はそうはいきませんし。
    • good
    • 0
この回答へのお礼

>人間がブラウザを利用して操作する事をトレースするわけですから、

そういうことなんですね。

やっとイメージできました。

一応curlを何度かたたくことで実現できました!!

これからZendも試してみようと思います。

未知の世界だったのですが、少し理解することができました。

ありがとうございました!!

お礼日時:2010/12/23 11:19

よこからですみませんが、


HTTPの通信は、一度のリクエストとレスポンスの組ですので、最後にcurl_close関数を叩いたら、
次回もう一度、curl_initをし直す必要があります。

また、curlだけに限らない話ですが、セッションを引き継ぐリクエストを送るときに自前でコードを記述するのは結構手間がかかるので、ZendFrameworkの「Zend_Http_Client」をライブラリとして使ってみてはいかがでしょう。
NARHさんの書かれたスクリプトを参考にして、Zend_Http_Clientを使った記述は、
<?php
/*

Zend Framework ダウンロードはここ
http://framework.zend.com/download/latest

Zend_Http_Clientのマニュアルはここ
http://framework.zend.com/manual/ja/zend.http.cl …

*/

require_once 'Zend/Http/Client.php';

$uri = 'https://example.com';

$config = array(
'adapter' => 'Zend_Http_Client_Adapter_Curl',
'curloptions' => array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYHOST => 1,
CURLOPT_SSL_VERIFYPEER => 1,
CURLOPT_CAPATH => 'path',
CURLOPT_CAINFO => 'path/to/ca.pem',
CURLOPT_SSLCERT => 'path/to/client.pem',
CURLOPT_SSLCERTPASSWD => 'password',
),
);

$client = new Zend_Http_Client($uri, $config);
$client->setCookieJar();//セッションを保持できるようにします。
$client->setParameterPost('name', 'value'); //POST値を入力します。

$response = $client->request('POST');

if($response->getStatus() == 200){
$client->setUri('http://example.com/next/page');

$response = $client->request('GET');

}

?>

このようになります。
アダプタとして、curlを使いますので(別のモジュールを選択することも可能)、内部的には、NARHさんのやっていることと同じです。
ソレとは別に、Cookieで取得したセッション用のIDなどを取り持って次の遷移に持込してくれるルーチンが仕込まれています。

ご参考まで。
    • good
    • 0
この回答へのお礼

Zendは使ったことがありませんでした。

とてもわかりやすいサンプルをありがとうございました。

早速試してみます。

お礼日時:2010/12/23 11:16

実は、先ほどのサンプルではポート指定を忘れてました。

(テヘッ!)

curl_setopt($ch, CURLOPT_URL, 'https://aaa.bbb.ne.jp');
でもいけると思います。
#すみません。相変わらず未検証です。

でも pem が上手くいっていなかったらダメなんですが、タイムアウトの指定はできたので、PHP のcURLのマニュアルも参考にしてみてくださいね。

#Web上にあんまりビンゴな資料ってありそうでないですね。
    • good
    • 0
この回答へのお礼

再びありがとうございます!

なんと証明書の件はクリアできました。
pemの件はOKだったようです。


また別の問題が・・・

アクセス先のサイトは、SSL証明書を通過したあと、更にログインの必要があり、
セッションを持ちまわっているようなのです。

その後、必要なパラメータをPOSTして情報を引き出します。

このような場合は、いったんログインページにcurl_initし、

その後検索フォームのページで再びcurl_initするようなイメージでいいのでしょうか。

あつかましくて申し訳ありませんが、もしお分かりのようでしたら

ご教授いただけると助かります。

よろしくお願いいたします。

お礼日時:2010/12/22 17:16

〉No.2


勉強になりました。
ネットワークはきちんと勉強しなくては行けませんね。

質問者さんにも、外した回答してすみませんでした。

とりあえず
stream_context_createで作ったコンテキストつきで通信する場合は、stream_socket_clientが使えます。

http://jp.php.net/stream_socket_client
    • good
    • 0
この回答へのお礼

ありがとうございました。

ネットワーク難しいです。

勉強になります。

お礼日時:2010/12/22 16:48

PHPが、OpenSSLのサポートが有効な状態でインストールされていますか?


その場合であれば、「ssl://」といったスキームを記述してやれば、自動的に暗号化して通信を行うので
そのようなエラーが出てくることは無いと思います。(プロキシかましてたりすると一手間かける必要がありますが・・・)

phpinfo();
あたりで、OpenSSLのサポートが有効になっているか確認してみてはいかがでしょう。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QOPTの手続き

先月アメリカの大学院を卒業し、現在OPTのための就職先を探しています。
既にEADカードは手元に届いてあります(OPT開始日は6月10日となっています)。
I-20もOPT申請時に、OPT期間を記載した新しいものを発行してもらっています。
通常、OPTをしない場合、アメリカの大学院を5月中旬に卒業した場合はグレイスピリオドは60日で7月中旬までに、アドバイザーに帰国の旨を連絡し、期間内に出国することになっていますが、OPTでEADカードを保持している場合は、そのまま滞在していてよいのでしょうか?OPT先が決まった時点でアドバイザーに連絡する以外に何か他に手続きは必要でしょうか?

Aベストアンサー

OPTには大学、もしくは大学院を卒業後の12ヶ月のものと、STEM(Science,Technology, Engineering and Math)として17ヶ月のものの2種類があります。そのどちらをお持ちかは存じませんが、いずれの場合でも、capと呼ばれるEADカード取得後のunemployment期間の上限が決められており、それまでに仕事がみつけられないと強制的にOPTが終了となります。この場合OPTを完了した後の60日のグレイスピリオドがありません。

お手元のEADカードのvalidが12ヶ月の場合
・capは90日ですから、6月10日を1日目として89日後までに仕事がみつからなければ90日目にはアメリカを出国しなければなりません。

お手元のEADカードのvalidが17ヶ月の場合
・capは120日ですから、6月10日を1日目として119日後までに仕事がみつからなければ120日目にはアメリカを出国しなければなりません。

ですからcap期間であれば、仕事がなくとも合法的にアメリカに滞在できます。またアドバイザーに仕事がみつからない旨を報告する必要はありませんし、アメリカから出国する時も報告する必要はありません。

OPTには大学、もしくは大学院を卒業後の12ヶ月のものと、STEM(Science,Technology, Engineering and Math)として17ヶ月のものの2種類があります。そのどちらをお持ちかは存じませんが、いずれの場合でも、capと呼ばれるEADカード取得後のunemployment期間の上限が決められており、それまでに仕事がみつけられないと強制的にOPTが終了となります。この場合OPTを完了した後の60日のグレイスピリオドがありません。

お手元のEADカードのvalidが12ヶ月の場合
・capは90日ですから、6月10日を1日目として89日後まで...続きを読む

QApache-PHP-fsockopenでSSL通信が出来ない。

----phpinfoの一部---
Apache/2.2.0 (Win32) DAV/2 mod_ssl/2.2.0 OpenSSL/0.9.8a mod_autoindex_color PHP/5.1.1

openssl
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.8a 11 Oct 2005
-------------------------
OpenSSL0.9.8aをインストール済みでコマンドプロンプトから実行可能な状態。パスも通しています。
--------------------------
<?php

$fp=fsockopen("ssl://www.netsecurity.ne.jp",443);


if (!$fp) {
die("ERROR\n");
}

/* 接続を終了 */
fclose($fp);

?>

これを実行するとIEのステータスバー「https://xxxxxxxx/xampp/1.phpを開いています」と表示されたままになってしまいます。
SSLではない接続だと問題なく接続できます。


winXP xamppです。

「www.netsecurity.ne.jp」は適当にSSL通信できるサイトを見つけてテストしてみましたが…。

設定・テスト方法等、注意すべき点をご指摘いただきたく思います。

----phpinfoの一部---
Apache/2.2.0 (Win32) DAV/2 mod_ssl/2.2.0 OpenSSL/0.9.8a mod_autoindex_color PHP/5.1.1

openssl
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.8a 11 Oct 2005
-------------------------
OpenSSL0.9.8aをインストール済みでコマンドプロンプトから実行可能な状態。パスも通しています。
--------------------------
<?php

$fp=fsockopen("ssl://www.netsecurity.ne.jp",443);


if (!$fp) {
die("ERROR\n");
}

/* 接続を...続きを読む

Aベストアンサー

$fp = fsockopen("ssl://www.example.com", 443, $errno, $errstr, 30 );

――のように、エラーコード/エラー文字列/タイムアウト時間を指定してデバッグしてみては。

QOPTのレジュメについて

現在アメリカの大学院生で、5月に卒業予定で、卒業後はOPTをしようと考えています。
今、OPT先の企業を探しているところなのですが、気に入った企業にレジュメを送る際に、OPTとして採用して欲しい旨をレジュメに明記しておくべきでしょうか?
OPTだと学生ビザで働けるため、企業側に就労ビザの取得のための負担を掛けずに済むので、その分企業側にとってもメリットだと思うし、企業側にとっても通常の就労かOPTか区別がつくようにした方がいいのかなと思うのですが・・・。

Aベストアンサー

自分の経験からお答えすれば、アメリカの企業は、レジメに書かれている内容で外国人がOPTで働くのかどうか大体わかりますし、実際にはインタビューの時働ける期間などを聞かれますからその時に答えます。ですからレジメにOPTで働きたいなどと書く必要はありませんし、書きませんでした。

>OPTだと学生ビザで働けるため、企業側に就労ビザの取得のための負担を掛けずに済むので、その分企業側にとってもメリットだと思う
これはどこかローカルの就職斡旋会社のスタッフとか、実際にアメリカの就職に携わっている人から聞いたのですか? それともあなたの個人的考えの範疇ですか? 私がOPTを使った時(今から数年前)は逆にOPTを嫌がる会社がありました。理由は将来就労ビザ取得のスポンサーになって欲しいといわれるのがわずらわしいからのようでした。すでにインターンなどの就労経験があったり、必要とする特別技術がある限りわざわざ外国人を雇うよりはアメリカ人を取りたいという風潮の会社もありました。ですから自分を雇うことがアメリカ人を雇うことよりもはるかにメリットがあるのだということをインタビューで簡潔に、明瞭に分りやすく納得させるのが大変でした。アメリカ人の友人に聞くと、OPTかそうでないかよりも大学院だと大学より高いWageを払うのがイヤで雇わないという会社もあるそうです。以前のように院を出ていると就職が有利とは必ずしもいえないそうですが、頑張ってみつけてください。 院の教授の紹介などがあると少しは違うと思いますよ。

自分の経験からお答えすれば、アメリカの企業は、レジメに書かれている内容で外国人がOPTで働くのかどうか大体わかりますし、実際にはインタビューの時働ける期間などを聞かれますからその時に答えます。ですからレジメにOPTで働きたいなどと書く必要はありませんし、書きませんでした。

>OPTだと学生ビザで働けるため、企業側に就労ビザの取得のための負担を掛けずに済むので、その分企業側にとってもメリットだと思う
これはどこかローカルの就職斡旋会社のスタッフとか、実際にアメリカの就職に携わっている人...続きを読む

Q非SSLページからSSLにセッション変数を引き渡すには

PHP4.3です
レンタルサーバーを借り、共有のSSLを利用します。

非SSLページは
http://***.com/a.php
というアドレスで、
SSLを使用したいページは
https://○○○○.ne.jp/~***-com/a.php
という指定にしてください。
とレンタルサーバーから指定されています。

PHPでセッション変数にユーザID等をもたせています。
非SSL同士のページでは引渡しがうまくいくのですが、
SSLのページには引数が引き渡せません。

どのようにしたらよろしいのでしょうか?

Aベストアンサー

自分、使った事ないのですが(==;

php.ini の
session.cookie_domain の設定
http://www.hizlab.net/app/portal.html
http://php.s3.to/man/ref.session.html


途中でdomainの設定を変更する場合? session_set_cookie_params()
http://php.s3.to/man/function.session-set-cookie-params.html

Qmacのoptフォルダの場所

お世話になります。

macを使用していて、あるソフトを入れた後にoptフォルダを見ろという
手順があるのですが、optフォルダがどこにできるのかわかりません。

一般的な場所で結構ですので、optが置かれる場所を教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

No.1です。
普通は/optは作られていません。
でも他のソフトが既に作っている可能性もあるかも知れませんが稀でしょう。

とりあえずはMachintosh HDの直下にoptというフォルダを作ってみてください。

QSSLと非SSL対応、且つ複数階層対応の記述方法

SSL対応のホームページにアクセスしたところ、「このページにはセキュリティで保護されている項目と保護されていない項目が含まれています。保護されていない項目を表示しますか?」というダイアログが表示されました。

なお、このダイアログは下記に記載されている方法で表示を抑止できました。
http://www.netmania.jp/colum/make/000370.php

ただし、1つの記述で複数階層に対応したい場合、どのように記述すれば良いかわからなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろしくお願いします。

私が考えたかぎりでは、相対パスでは複数階層に対応できず、絶対パスにする必要があると思いました。
そのため、サイトにアクセス時のアドレスがhttpであること、又はhttpsであることを取得できれば、それを元に分岐させれば良いのではと思ったのですが、どのようにすればhttpやhttpsを取得できるのかが分かりませんでした。

なお、ソースは下記となります。
また、考え方自体に問題があるようでしたら、その旨ご指摘いただければと思います。
<?php
//if() {
// HTTPSの場合、そのアドレスを取得する(ここの取得方法が分かりません)。
$protocol = "https";
//} else {
// HTTPの場合、そのアドレスを取得する(ここの取得方法が分かりません)。
$protocol = "http";
//}
// ここの取得方法が分かりません。
$protocol .= "://localhost/";
// デバッグ用
echo $protocol;
?>
<img src="<?php echo $protocol; ?>sample.gif" />

それと、環境は下記のような感じとなります。
1. https://localhost/hoge1.html
2. https://localhost/hoge/hoge2.html
3. https://localhost/sample.gif
ちなみにhtmlや画像は他にも複数階層あります。

以上、よろしくお願いします。

SSL対応のホームページにアクセスしたところ、「このページにはセキュリティで保護されている項目と保護されていない項目が含まれています。保護されていない項目を表示しますか?」というダイアログが表示されました。

なお、このダイアログは下記に記載されている方法で表示を抑止できました。
http://www.netmania.jp/colum/make/000370.php

ただし、1つの記述で複数階層に対応したい場合、どのように記述すれば良いかわからなかったので、アドバイスいただける方がいらっしゃいましたら、ご教示の程、よろし...続きを読む

Aベストアンサー

基本的に、環境変数を見ます。($_SERVER変数ですね)

共有SSLとか、レンタルサーバだったりするとまた色々対策を取らなければいけないんですが、
SSLでのアクセスか判断する材料として、

$_SERVER['HTTPS'] === 'on'
→HTTPSというキーに「on」が入っているかどうかで判断。普通のHTTPプロトコルの場合は、存在自体しないので
isset($_SERVER['HTTPS'])で確認するのもありかも。

$_SERVER['SERVER_PORT'] == '443'
→サーバのポートを見て、80だったら通常のHTTP、443だったらSSLと判断します。


※番外編で、さくらインターネットの共有SSLの場合、どちらも入ってこないので、
isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])
この環境変数が吐かれているかどうかで判断出来るとのことでした。

また、上記のような方法でSSLか否かの判別ができたら、HTMLの記述に、「base」タグというものがあるので、
<base href="<?php echo $uri?>" />
としてやって、相対パスで記述されたURIの基準となるURIを指定してやることで、普通に相対パスで引けます。
http://www.htmq.com/html/base.shtml


後は、PHPで判断する必要がなくなる方法として、相対パスの記述方法で、
<img src="/yourdir/img/filepath.jpg" />
などと、頭に「/」から始めるように記述すれば、プロトコルに関係なく、ドメイン以下のディレクトリに対して絶対パスが引けます。

基本的に、環境変数を見ます。($_SERVER変数ですね)

共有SSLとか、レンタルサーバだったりするとまた色々対策を取らなければいけないんですが、
SSLでのアクセスか判断する材料として、

$_SERVER['HTTPS'] === 'on'
→HTTPSというキーに「on」が入っているかどうかで判断。普通のHTTPプロトコルの場合は、存在自体しないので
isset($_SERVER['HTTPS'])で確認するのもありかも。

$_SERVER['SERVER_PORT'] == '443'
→サーバのポートを見て、80だったら通常のHTTP、443だったらSSLと判断します。


※番外編で、さ...続きを読む

QOPTビザについての質問です。

OPTビザについての質問です。
今年の5月にアメリカの大学を卒業し、まだ手元には届いていませんが、7月からのOPTビザを申請中です。
OPT期間中に9月から12月までインターンをしたら、日本での就職活動のため本帰国しようと思っているのですが、2011年5月にアメリカでの資格試験のためにもう一度アメリカに戻ってこようと思っております。
OPTは90日以上雇用がないと剥奪される とのことなので、この資格試験には観光ビザで入国したいと思っているのですが可能でしょうか?
資格試験は1日、その後の学会が4日間なので日数的には観光ビザで大丈夫だとは思うのですがどうでしょうか?
申し訳ありませんが、OPTに詳しい方、以前OPT取得後、その期間中に観光ビザで再入国なさった方などがいらっしゃればご助言いただけないでしょうか?

Aベストアンサー

>大変申し訳ないのですが、DSOが何なのかを教えて頂けませんでしょうか?

すみません。DSOとはdesignated school officerで、大学で留学生のSEVISを担当している責任者のことです。international students officeなどに常駐している留学生アドバイザーとか、担当者がそれにあたります。

>インターンの終了が12月31日、もしくは1月中旬の場合、それから間もなく帰国したとして、5月にまたアメリカに資格試験のために渡る際、それが”留学終了”から5ヶ月以内ならFビザが残っている事にはならないのでしょうか?

なりません。OPTを終了する場合は、上記DSOにOPT(就労)の終了を報告しなければなりません。その報告を受けて、学校のDSOがあなたのI-20(SEVIS)の終了をSEVPに報告します。F-1ビザというのは有効なI-20を伴わなければ効力を発揮しないものですから、いくらパスポートにビザステッカーが貼ってあっても、それだけでは意味がないのです。
もちろん今回のI-20をcompleteされてから「5か月以内に」また留学のために渡米する場合は、新しい有効なI-20を得ることになるので、そのビザは再び生きてきます(有効なI-20があるからです)。

>観光ビザで大丈夫でしょうか?

観光ビザはありません(日本国籍なら)ので、ビザ免除(ESTA必要)入国ですね。
入国の時に「目的は観光」と言わなければなりません(試験を受けるとか、余計なことは言わないほうが無難です)。
ビザ免除での入国の場合は、入国時に入管に提出する出入国管理カードは緑色のI-94Wになります(ビザ保持者は白いI-94ですね)ので、あえてビザの有無など問われません。万が一入管審査官がビザのページを見つけて質問してきたら、もう留学は終えて今回は留学ではないことを伝えれば、問題ありません。
場合によっては、おせっかいな入管がビザステッカーにVOID(無効)と刻印してしまうかもしれませんが、5か月以内に留学する予定がまたあるなら、その旨を伝えてやめてもらいましょう。必要ないなら、VOIDでも良いわけですが…

>大変申し訳ないのですが、DSOが何なのかを教えて頂けませんでしょうか?

すみません。DSOとはdesignated school officerで、大学で留学生のSEVISを担当している責任者のことです。international students officeなどに常駐している留学生アドバイザーとか、担当者がそれにあたります。

>インターンの終了が12月31日、もしくは1月中旬の場合、それから間もなく帰国したとして、5月にまたアメリカに資格試験のために渡る際、それが”留学終了”から5ヶ月以内ならFビザが残っている事にはならないのでしょうか...続きを読む

Qfsockopenなどについて

呼び出し元:aaaa.php
呼び出し先:https://bbbbb.jp/php/cccc.php
認証:Basic
ユーザー/パス:user/pass
メソッド:POST

PHP:5.x

という前提でfsockopenを使ってaaaa.phpからcccc.phpにPOSTでデータを投げようと考えています。

今回初めてコマンドラインからPOSTをすることになり、いろいろと模索している状況です。PEARやPECL系は入れないみたいなので、fsockopenをつかうことになりました。

aaaa.phpの中身
$POST = "postData";
$request = "POST /php/cccc.php HTTP/.0\n".
"Host: https://cccc.jp\n".
"Authorization: Basic".base64_encode("dddd:eeee");
"\n".
$POST
."\n".
"\n";
$fp = fsockopen("ssl://bbbbb.jp",443);
fputs($fp,$request);
$res="";
while(!feof($fp)){
$res=fgets,4096);
fclose($fp);

と、こんな感じです(今手書きだったので、このままだとコンパイルエラーになる可能性もありますが、それは無視とします)

タイムアウトを15に設定しデバッグしても、それを過ぎてもなんのレスもない状態です。
requestの書き方がまずいんだと思うのですが、どこをどうすればいいのかわかりません。
authを入れない状態だと、resに"</body></html>"というタグが入ってきます。

受け取り側のスクリプトはPOSTで受け取ったものをログに吐き出すだけの単純なものです。

ちょっとつかみづらい内容で申し訳ありません。もし情報が足りなければ捕捉いたしますので、ご教授願います。

呼び出し元:aaaa.php
呼び出し先:https://bbbbb.jp/php/cccc.php
認証:Basic
ユーザー/パス:user/pass
メソッド:POST

PHP:5.x

という前提でfsockopenを使ってaaaa.phpからcccc.phpにPOSTでデータを投げようと考えています。

今回初めてコマンドラインからPOSTをすることになり、いろいろと模索している状況です。PEARやPECL系は入れないみたいなので、fsockopenをつかうことになりました。

aaaa.phpの中身
$POST = "postData";
$request = "POST /php/cccc.php HTTP/.0\n".
"H...続きを読む

Aベストアンサー

Content-Length:文字列の長さ
↑がありません。

$resが .= で加算になっていませんが、これは注意書き通りですか?

あと、参考URLのような方法もPHPにはありますので参考になさってみてください。

余談ですが、POSTする先のプログラム側でリファラチェックなどが行われていたら、いくら待っても通らない可能性はあります。

参考URL:http://programming-magic.com/?id=134

Qコミカレ→OPT→4年制大→OPTは可能?

現在アメリカのコミカレに通うものです。
MajorはAccountingで将来はCPAを取りアメリカで就職したいと思っています。
最近将来のことについて具体的に道のりを考えなければ…と思い悩んでいます。

ただ高卒でそのままこちらの大学に来たためきちんとした社会経験も無く、もちろん留学生なのでアメリカで働いたこともありません。
なので、正式にきちんと就職先を見つける前にOPTなどを利用してインターンなどで経験を積みたいと思っています。
チャンスがあるだけそのような経験をしたいと思うので、今のコミカレを卒業した後、OPTを取りインターンをして社会経験をしようと思っていますが、最終的にはきちんと4年制大学にTransferして卒業するつもりです。またその卒業後にOPTでインターンを本格的に就職先を視野に入れながら探したいと思っています。
このようにOPTを2回とるということは可能なのでしょうか…?それとも1度までと決められているのでしょうか。

また、インターンはOPT以外にする方法などあるのでしょうか。

いろいろアドバイスいただけたら嬉しいです。
よろしくお願いいたします。

現在アメリカのコミカレに通うものです。
MajorはAccountingで将来はCPAを取りアメリカで就職したいと思っています。
最近将来のことについて具体的に道のりを考えなければ…と思い悩んでいます。

ただ高卒でそのままこちらの大学に来たためきちんとした社会経験も無く、もちろん留学生なのでアメリカで働いたこともありません。
なので、正式にきちんと就職先を見つける前にOPTなどを利用してインターンなどで経験を積みたいと思っています。
チャンスがあるだけそのような経験をしたいと思うので、今のコ...続きを読む

Aベストアンサー

同じ大学に1年以上在籍して卒業すれば、1年間のOPTが認められます。
昔は1度しかチャンスがなかったのですが、法律が変わって学校を卒業する度、すなわち何度も取得できるようになりました。
OPT取得で大事なことは、就職先が見つかっていなくても、必ず卒業前に申請することです。
これは、DSOの資格を持つインターナショナル・アドバイザーが全ての手続きをしてくれます。
http://www.ice.gov/sevis/students/opt.htm

また、専攻と関連する職種であれば、在学中にCPTというインターンが可能です。
学期中は週20時間まで、休みの時期は週40時間まで、有給・無給に関わらず働けます。
ただし、CPTは在学中で通算364日までです。365日を越えると卒業後のOPTが貰えなくなるのでお気をつけください。
これも、アドバイザーが申請してくれるので、インターン先を見つけたら(教授のコネや派遣会社などをフルに使って自力で見つける必要があります)、手続きを相談しましょう。
http://www.ice.gov/sevis/students/cpt.htm

Accounting専攻で問題となるのは、CPA資格試験を受けられるのが大学を卒業した後の秋だということです。
そして、次のステップである就労ビザH1-bを申請できるチャンスが毎年4~5月しかなく、実際に働けるのは10月からなので、1年しか有効でないOPTを取得する時期を慎重に考えておく必要があります。5月で卒業せずに、夏学期を終わってから卒業し、OPTの有効期間が秋に近いようにする方がよいでしょう。
ただし、資格試験が終わってから就職先を探すと、4月の申請開始日までに仕事が見つからない可能性も出てきます。学生時代にインターンをフル活用して、就職先を早い目に確保しておくことをお勧めします。

また、多くの就職先が求めているのは、CPAの資格持ちなので、資格試験に失敗するとクビになります。アメリカ人のように、卒業してから毎年数科目ずつパスできればいい、というわけにはいかないのです。
このように、留学生にとってCPAはかなり大変ですが、資格さえ取れれば、就職活動は俄然ラクになります。
資格試験のことをを考えると、大学院へ進むという進路も考慮した方がいいかもしれません。

今のうちから就労ビザまで射程に入れて情報を集めておいてくださいね。
がんばってください。応援してます。

同じ大学に1年以上在籍して卒業すれば、1年間のOPTが認められます。
昔は1度しかチャンスがなかったのですが、法律が変わって学校を卒業する度、すなわち何度も取得できるようになりました。
OPT取得で大事なことは、就職先が見つかっていなくても、必ず卒業前に申請することです。
これは、DSOの資格を持つインターナショナル・アドバイザーが全ての手続きをしてくれます。
http://www.ice.gov/sevis/students/opt.htm

また、専攻と関連する職種であれば、在学中にCPTというインターンが可能です。
学...続きを読む

Qfsockopen で allabout のサイトだけ読めない?

PHP4 を使っているのですが、get_heaers() 関数が搭載されていないので、fsockopen を使って自作しています。下記のような感じになっています。(かなり抜粋)

$parts = parse_url($url);
$fp = fsockopen($parts["host"], $parts["port"], $errno, $errstr);
fputs($fp, $request."\n");
$response = fgets($fp, 1024);
fclose($fp);

先日まではこのコードで問題なく動作していたのですが、今日になったら http://allabout.co.jp/ 等 allabout のサイトだけが読み込めなくなってしまいました。fgets がタイムアウトしてしまいます。

ブラウザでアクセスすると問題なく表示されますし、 telnet allabout.co.jp 80 で手動でアクセスしても問題はないようです。

PHPのfgetsが(freadも)タイムアウトしてしまうのですが、どのあたりに問題があるのでしょうか。

PHP4 を使っているのですが、get_heaers() 関数が搭載されていないので、fsockopen を使って自作しています。下記のような感じになっています。(かなり抜粋)

$parts = parse_url($url);
$fp = fsockopen($parts["host"], $parts["port"], $errno, $errstr);
fputs($fp, $request."\n");
$response = fgets($fp, 1024);
fclose($fp);

先日まではこのコードで問題なく動作していたのですが、今日になったら http://allabout.co.jp/ 等 allabout のサイトだけが読み込めなくなってしまいました。fgets が...続きを読む

Aベストアンサー

fputs($fp, $request."\n");

fputs($fp, $request."\r\n");
にしたら良さそうです
$request内の改行も\r\nにします。


人気Q&Aランキング