• 締切済み

fsockopen関数について

PHPでPOSTを送ろうと思ったのですがfsockopen関数の使い方が分かりません。 以下の例のソースコードを書いてくれませんか? 例 http://www.sample.com/post.phpの$_POST['name']にtestを送る

  • xxew
  • お礼率5% (1/19)
  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

回答No.1

バックグラウンドで他のサーバーに対してPOSTでデータを送る、という事ですね。サンプルとしてざっくりしたコード(しかも未テスト)を書いておきますので、どういう意味なのかとテスト、それと実際の使用に耐えうる処理は頑張って実装して下さい。 まずPOSTとは何ぞやというのを予備知識として参考URLで見ておいて下さい。 $data = "name=test"; $request = "POST /post.php HTTP/1.0\r\n"; $request .= "Content-Type: application/x-www-form-urlencoded\r\n"; $request .= "Content-Length: ".strlen($data)."\r\n"; $request .= "Host: www.sample.com\r\n"; $request .= "\r\n"; $request .= $data; //接続 $fp = fsockopen("www.sample.com",80); if ($fp){ fputs($fp,$request); $response = ""; while (!feof($fp)){ $response .= fgets($fp,4096); } fclose($fp); } こんな感じで。テストしてないのでミスってるかも知れません。

参考URL:
http://members.jcom.home.ne.jp/j-klein/security/network-proto-http.html

関連するQ&A

  • fsockopenのソケットが全然分からないのです

    fsockopenのソケットについて教えてください ▽PHP: fsockopen - Manual   http://php.net/manual/ja/function.fsockopen.php >fsockopen("www.example.com", 80, $errno, $errstr, 30); ■質問 ・ソケットて何ですか? ・この1行にどういう意味があるのでしょうか? ・事前に通信エラーを確認? ・GETとかPOSTとかでエラー判定してはいけないのでしょうか? ・「fsockopenを利用するメリット」と、「どういう時に利用するものなのか」教えてください ■質問背景 ・APIコード見てたら、この処理が書かれていたので、調べてみたけど意味が理解できず、質問しました

    • ベストアンサー
    • PHP
  • fsockopen関数について

    fsockopen関数を使って、POSTでリダイレクトさせています。 リダイレクト先ページで以下の文言が表れます。 ”HTTP/1.1 200 OK Date: Mon, 27 Nov 2006 05:53:05 GMT Server: Apache/1.3.37 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.7l Connection: close Content-Type: text/html; charset=Shift_JIS ” 消すにはどうすればよろしでしょうか?

    • 締切済み
    • PHP
  • PerlでPHPのfsockopen関数のようなものはありますか?

    phpでは fsockopen関数があり、ターゲット・ポート・エラー番号・エラー文字列・タイムアウトを設定すれば、結果を文字列として取得できます。 これをperlで同じことをさせたいのですが、簡単なサンプルがありましたら教えてください。

  • 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
  • PHPのfsockopenを使用してファイルのアップロード方法

    PHPのfsockopenを使用してファイルのアップロード方法 宜しくお願い致します。 PHPでHTTPポートなどに接続させて、POSTやGETでデータを送信できるようにする関数のfsockopenを使用して、HTMLのformを使用せずにPHPプログラムのみでサーバ上にあるファイルを別のサーバへアップロードする方法はありませんか? 文字列を送信する事はできるので、ファイルのアップもできそうなのですが、やり方がわかりません。

    • ベストアンサー
    • 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
  • 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
  • PHP System関数が動作しません

    サーバー上の、あるphpファイル(sample_c.php)をシステム関数を使用して実行する必要があり、以下の流れのプログラムを作成しました。 sample_a.php でSubmit sample_b.php でSystem関数でsample_c.phpを呼び出し sample_c.php で実行 です。 <? /* sample_a.php */ ?> <form action="sample_b.php" method="post"> <input type="hidden" name="login" value="sample_user"> <input type="hidden" name="action" value="trigger_b"> <input type="submit" value="submit"> </form> <? /* sample_a.php */ ?> <? if($_POST['action'] =="trigger_b") { $login = $_POST['login']; system("sample_c.php $login"); header('Location: sample_a.php?action=fin'); exit; } else { header('Location: sample_a.php?action=error'); exit; } ?> <? /* sample_c.php */ ?> $_SERVER['argv'] で受け取った値を処理 ----------------- 3つのファイルは全て同じ階層に配置してあります。 sample_a.phpでsubmitすると、sample_a.php?action=fin にリダイレクトするのですが、 sample_c.php内の動作が実行されていません。 中身はDB接続して、テーブルに保存する単純なsql文が入っていて、sample_c.php単体での動作は確認しています。 (単体テストの場合は$_SERVER['argv']の代わりに変数に値をセットして実行しています。) System関数で変数を受け渡さずに system("sample_c.php $login"); を system("sample_c.php") として実行してもうまくいきません。; 原因が分かるかたがいらっしゃれば教えてください。 お願いします。

    • ベストアンサー
    • PHP
  • fsockopenの例外について

    お世話になります。 現在、fsockopen関数を利用してソケット通信を行うシステムを開発しております。 上記、システムを利用する中で考えられる例外として「apacheが停止しているサーバーに通信を行った場合」というのを想定して、例外処理を作成しております。 例外処理をtry catchによって検知しようとしたのですが、try catchでは受け取れませんでした。 ソースは下記のとおりです。 $api_url = "http://localhost/webapp/test"; $api_arr = parse_url($api_url); try{ // ソケット通信開始 $fp = fsockopen($api_arr["host"], 80, $errno, $errstr, 30 ); }catch(ErrorException $e){ echo "Error - failed to connect to the API - ".$e->getMessage(); exit; }catch(Exception $e){ echo "hoge2"; } 上記、ソースをunixのコマンドから実行した場合に出力されたエラーは下記のとおりです。 Error: fsockopen(): unable to connect to localhost:80 (Connection refused) もし、お分かりになる方がおられましたら、ご教示お願い致します。

    • 締切済み
    • PHP
  • fsockopenのpop3で接続できません。

    OPENPNEというSNSエンジンの携帯メール投稿する部分の設定をしていますが、POP3サーバに接続できません。以下の一文でタイムアウトになります。たしかにpop3サーバは存在するのに、"サーバーに接続できません"と表示され、time outになります。 $sock = fsockopen("メールのあるサーバ", 110, $err, $errno, 10) or die("サーバーに接続できません"); サーバにpingでつながりますし、アウトルックエクスプレスからも繋がります。ですが、あるサイトのpop3に接続実験するサイトでは繋がりません。phpに関する知識は無いのですが…phpで接続するから問題なのでしょうか? よろしくお願いいたします。 設定しているソース http://www.openware.co.jp/archives/86 接続テストしたURL http://seo.atompro.net/seotoolfree_pop3chk_.html

    • ベストアンサー
    • PHP

専門家に質問してみよう