• 締切済み

fsockopenなどについて

呼び出し元: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で受け取ったものをログに吐き出すだけの単純なものです。 ちょっとつかみづらい内容で申し訳ありません。もし情報が足りなければ捕捉いたしますので、ご教授願います。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • tols
  • ベストアンサー率46% (7/15)
回答No.1

Content-Length:文字列の長さ ↑がありません。 $resが .= で加算になっていませんが、これは注意書き通りですか? あと、参考URLのような方法もPHPにはありますので参考になさってみてください。 余談ですが、POSTする先のプログラム側でリファラチェックなどが行われていたら、いくら待っても通らない可能性はあります。

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

関連するQ&A

  • ImgBurnの使い方

    DVD焼きアプリ「ImgBurn」において、 AAAA\BBBBB\CCCC AAAA\BBBBB\DDDD AAAA\BBBBB\EEEE HDD上ではこんな感じの構成のフォルダを、DVDでは CCCC DDDD EEEE をルート直下に見えるように焼きたいのですが、どこをどのように設定すればいいでしょうか?

  • 特定の値をPOST送信で他のサーバーに渡したい

    あるPHPページを自動転送ページとし、転送先に特定の値をPOST送信したいと考えています。 同じような質問があり、fsockopenを使ってすると良いようなのですが、どうしても上手くいきません。 現状、POST送信は成功しているのですが、URLが自動転送ページのままで、転送先ページのテキストのみが表示されている状態です。 どうすれば転送先ページに完全に移ってしまえるでしょうか。 ご助力下さい。 <ソース> $url = "http://hoge.co.jp/test.php";  //転送先URL $method = "POST"; $headers = "POST http://hoge.co.jp/test.php HTTP/1.1\r\n";  //転送先URL $postdata = "parm=ok"; $URL = parse_url($url); if(!isset($URL['port'])){$URL['port'] = 80;} //リクエストヘッダ $request = $method." ".$URL['path']." HTTP/1.0\r\n"; $request .= $headers; $request .= "Host: ".$URL['host']."\r\n"; $request .= "User-Agent: PHP/".phpversion()."\r\n"; $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: ".strlen($postdata)."\r\n"; $request .= "\r\n"; $request .= $postdata; //相手サーバへ接続 @$fp = fsockopen($URL['host'], $URL['port']); // 接続失敗 if (!$fp) {die("ただいまメンテナンス中です。\n");} //POSTで送信 fputs($fp, $request); $response = ""; while (!feof($fp)) { $response .= fgets($fp, 4096); } fclose($fp); //ヘッダ部分とボディ部分を分離 $DATA = split("\r\n\r\n", $response, 2); //出力 echo "<!--\n".$request."\n-->\n"; echo "<!--\n".$DATA[0]."\n-->\n"; echo $DATA[1];

    • ベストアンサー
    • PHP
  • fsockopen で 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も)タイムアウトしてしまうのですが、どのあたりに問題があるのでしょうか。

    • ベストアンサー
    • PHP
  • php fsockopenの文字化けについて

    PHPプログラミングの初心者です。 現在Yahooファイナンスのページから為替情報を自動で取得するスクリプトを作成しています。 サーバーからの応答は「HTTP/1.1 200 OK」となっているのですが、取得したデータが全て文字化けして表示されます。 mb_convert_encodingを使っても結果は同じでした。 どのようにすれば文字化けを解消できるのでしょうか? 下記がスクリプトの内容です。よろしくお願いいたします。 <?php /* リクエストライン */ $request = "GET / HTTP/1.0\r\n"; $request .= "Accept: */*\r\n"; $request .= "Accept-Language: ja\r\n"; $request .= "User-Agent: PHP-".phpversion()."\r\n"; $request .= "Accept-Encoding: gzip, deflate\r\n"; $request .= "Host: finance.yahoo.co.jp\r\n"; $request .= "Connection: Keep-Alive\r\n"; $request .= "\r\n"; $fp==""; $fp =@fsockopen("finance.yahoo.co.jp", 80); /* 要求データ送信 */ fputs($fp, $request); /* 応答データ受信 */ $response = ""; while (!feof($fp)) { $response.= fgets($fp); } /* 接続を終了 */ fclose($fp); /* ヘッダ部分とボディ部分を分離 */ $DATA = split("\r\n\r\n", $response, 2); /* リクエストヘッダをコメントアウトして出力 */ echo "<!--\n".$request."\n-->\n"; /* レスポンスヘッダをコメントアウトして出力 */ echo "<!--\n".$DATA[0]."\n-->\n"; /* メッセージボディを出力 */ echo $DATA[1]; ?>

    • ベストアンサー
    • PHP
  • cron は動作しているのですが、一部動作していない命令が・・

    cronでPHPファイルを定期動作させるようにしています。下記はそのPHPファイルの内容です。 上部の「メールの送信」は時間通りされるのですが、下部の関数「fsockopenやfputs」あたりが動作していないようなのです。 このPHPファイルをURL打ち込みしてブラウザに表示すると、目的とおりの動作をしますのでソースのミスではないようです。cronでfsockopenは動作しないとか・・あるのでしょうか。ちなみにfsockopenで行いたいのは指定のURLにパラメーターを送る動作です。 //----メールの送信----- //言語の設定 mb_language(\"japanese\"); mb_internal_encoding(\"Shift_JIS\"); //登録メールの送信 $to=\"aaaa@aaa.jp\"; $subject=\"時間動作確認\"; $message=\"動いてますよ!\"; $header=\"from:info@aaa.jp\"; $send_mail=mb_send_mail(\"$to\",\"$subject\",\"$message\",\"$header\");   ( 中 略 ) //クエリメソッドを作成 $url = \"http://xxx.jp/aaa/bbb.php //リクエストラインを作成 $request = GET.\" \".$url.\" HTTP/1.0\\r\\n\"; $request .= \"Host: \".$URL[\'host\'].\"\\r\\n\"; $request .= \"User-Agent: PHP/\".phpversion().\"\\r\\n\"; $request .= \"\\r\\n\"; //WEBサーバへ接続 $fp = fsockopen(\"xxx.jp\", 80); //接続に失敗した時の処理 if (!$fp) { die(\"ERROR\\n\"); } //要求データ送信 fputs($fp, $request); //接続を終了 fclose($fp); 説明が下手ですいません。 どうしたら指定のURLにパラメーターを送れるのでしょうか・・。 どなたかお助けいただけませんでしょうか。 お願いします。。

    • 締切済み
    • PHP
  • fsockopenで下層ページの内容を取得するには

    わたくしphp歴4ヶ月のものです。 fsockopenで下層ページの内容を取得するにはどうすればよいのでしょうか。説明がうまくできないので例を書きます。 business.yahoo.co.jp/prod/store を指定するとエラーが出ます。 例1) $fp=fsockopen("business.yahoo.co.jp/prod/store", 80, $errno, $errstr, 30); if(!$fp) { echo "$errstr ($errno)<br>\n"; } else{ fputs($fp, "GET / HTTP/1.0\r\n\r\n"); while(!feof($fp)) { echo fgets ($fp,600); } fclose($fp); } business.yahoo.co.jpを指定するとエラーが出ません。 例2) $fp=fsockopen("business.yahoo.co.jp", 80, $errno, $errstr, 30); if(!$fp) { echo "$errstr ($errno)<br>\n"; } else{ fputs($fp, "GET / HTTP/1.0\r\n\r\n"); while(!feof($fp)) { echo fgets ($fp,600); } fclose($fp); } 下層ディレクトリのページはどのように指定すればよいのでしょうか。/←スラッシュに問題があるのでしょうか。 その場合のエラーの内容は下記です。 Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/mero/public_html/test.php on line 23 Warning: fsockopen(): unable to connect to business.yahoo.co.jp/prod/store:80 in /home/mero/public_html/test.php on line 23 No such file or directory (2) 基本的な質問でたいへん恐縮ですが、 ご指導お願いいたします!

    • ベストアンサー
    • PHP
  • SQLでの集計

    下記の様に、「複数のitemを買っているuserと購入されたitem」のテーブルと、 user item ---------------------------------- 田中 AAAA 田中 CCCC 田中 EEEE 北野 DDDD 北野 BBBB 北野 AAAA 小堺 CCCC 小堺 EEEE 松本 EEEE 松本 KKKK 松本 CCCC 松本 DDDD 浜田 BBBB 浜田 DDDD 下記の様な IDに紐付いた 「item」のテーブルから、 ID  item ---------------------------------- 1   AAAA 2   BBBB 3   CCCC 4   DDDD 5   EEEE 下記の様に各itemと各itemを買った場合に一緒に買われるitemの一覧を結果 として表示させたいのですが、クエリの作り方が思い浮かばず、困っています。 ※)可能であれば、買われたitemを表示する際にはbuy1から(左側から)同時購入 回数の多いitemを重複せずに並べて表示したい ID  item  buy1  buy3  buy4  buy5  buy6・・・・ ---------------------------------- 1  AAAA CCCC BBBB DDDD EEEE 2  BBBB DDDD AAAA 3  CCCC AAAA EEEE DDDD KKKKK 4  DDDD AAAA BBBB CCCC EEEE 5  EEEE AAAA CCCC KKKKK 尚、IDと紐付いているitem数は決まっていますが、買われるitemの種類は上記 の様にIDが1~5だけではなく、集計してみないと判らない状況です。 今の所、SQLはACCESS(2003)上にて手打ちしています。 以上、ご教示のほど、宜しくお願い致します。

  • POP before SMTPはどうやって?

    PHPを今勉強しています。 mail関数で掲示板の内容をPOSTで送ったときにメールしようとしていますが、使用しているプロバイダのSMTPがPOP認証を必要としています。 考えとしては fsockopenでpopにアクセスしてユーザー名とパスワードを入れて接続はそのままでSMTPでメールを送る。 送ったあとに接続をCloseしようと考えていますがうまくいきません。netstatでみるとPOPにはEstablishedとなっていますので接続できていると思いますが、ユーザー認証ができているかわかりません。このような方法でPOP Before SMTPは実装できますでしょうか。 コードはこのようにしています。(一部変えています) $fp = fsockopen ("popaddress.com", 110, $errno, $errstr, 30); if (!$fp) { echo "Error msg in fsockopen is $errstr ($errno)<br>\n"; } else { fputs ($fp, "user hoge\r\n"); echo fgets ($fp,128); fputs ($fp, "pass hoge\r\n"); } mail($smtp, $msg);

    • ベストアンサー
    • PHP
  • アクセスログから同時ログイン数を割り出す手法

    以下のようにアクセスログが出力されるものがあります。 このログより、ユーザがログインした時点で他に何ユーザログイン しているかを集計する方法を模索しています。 何か良い方法ありますでしょうか。 *************************** user,login,logout aaaa,095703775,100825968 bbbb,095709415,095809695 cccc,095732774,095733633 bbbb,095734883,095735227 aaaa,095735321,095735727 dddd,095742555,095743680 eeee,095742664,095743102 gggg,095743196,095743664 tttt,095801070,095804070 *************************** ・userはログインしたユーザ名、login、logoutはHHMMSSmmm形式で時刻を出力します。 ・各ユーザはloginからlogoutまでの間ログインした状態です。 出力結果としては以下のようなイメージです。 *************************************** user,login,logout,実行ユーザ数 aaaa,095703775,100825968,0 bbbb,095709415,095809695,1 cccc,095732774,095733633,2 bbbb,095734883,095735227,2 aaaa,095735321,095735727,3 dddd,095742555,095743680,2 eeee,095742664,095743102,3 gggg,095743196,095743664,3 tttt,095801070,095804070,2 *************************************** 以上です

  • htmlで以下のような番号を振ることはできるのでしょうか?

    htmlで以下のような番号を振ることはできるのでしょうか? Wordのアウトラインのような番号を振りたいのです。 ネットで検索したのですが、なかなか解決策が見つからなかったので、どなたかご存知の方がいらっしゃいましたら教えていただきたいと思います。よろしくお願いいたします。 <作成したい番号> 1.AAAAA 1.1 aaaa 1.2 bbbb 1.3 cccc 2.BBBBB 2.1 dddd 2.2 eeee 3.CCCCC 3.1 ffff 3.2 gggg 3.3 hhhh <現状のタグ> <ol> <li>AAAAA <ol><li>aaaa</li><li>bbbb</li><li>cccc</li></ol> </li> <li>BBBBB <ol><li>dddd</li><li>eeee</li></ol> </li> <li>CCCCC <ol><li>ffff</li><li>gggg</li><li>hhhh</li></ol> </li> </ol>

    • ベストアンサー
    • HTML

専門家に質問してみよう