fsockopenでallaboutのサイトが読めない?

このQ&Aのポイント
  • PHP4を使っているため、get_headers()関数が利用できず、代わりにfsockopenを使用しています。
  • しかし、最近allaboutのサイトだけが読み込めなくなり、fgetsがタイムアウトしてしまいます。
  • ブラウザやtelnetでのアクセスでは問題なく表示されるため、原因がわかりません。
回答を見る
  • ベストアンサー

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

  • haru44
  • お礼率68% (153/223)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

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

haru44
質問者

お礼

回答ありがとうございます。 ご指摘の通り \r\n にしてみたら、スンナリできました! 感激です! ありがとうございました。

関連するQ&A

  • 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
  • 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
  • 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からPerl へのコンバート

    現在、PHPで作成したものをPerlへ変換しております。 Perlはあまりやった事がないので四苦八苦しております。 下記の処理をPerlへ変換する場合、どの様な記述になりますでしょうか? 精通している方、ご助言お願いいたします。 my $fp = fsockopen( $Host, "80", $ErrNo, $ErrStr, 10 ); if ( $fp ) { $out = "GET " . $Path . " HTTP/1.1\r\n"; $out.= "Host: " . $Host . "\r\n"; $out.= "Connection: Close\r\n\r\n"; fputs( $fp, $out ); while( !feof( $fp ) ) $ret .= fgets( $fp, 128 ); } fclose( $fp );

    • ベストアンサー
    • Perl
  • 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関数を利用してソケット通信を行うシステムを開発しております。 上記、システムを利用する中で考えられる例外として「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
  • ソケット通信で連続画像を取得表示するには

    お世話になっております、教えて頂きたい事が出てきました。 ソケット通信で連続した画像(jpeg)を取得してファイルには保存せずに ブラウザ上に表示しようと思っていますが、最初の画像は表示されますが 後の画像が表示されません。 (更新されずに同一画像が表示されます) 一応、以下のようなリスト(簡略)で行っていますが、何かいいやり方があるでしょうか。 それとも、そもそもこの方式では連続画像の表示更新は出来ないのでしょうか。 ご存知の方がいらっしゃいましたら、よろしくお願い致します。 //---(概略リスト test.php)------------------------- header('Content-Type: image/jpeg'); // ~一部略~ $fp = fsockopen ('192.168~~', 80, $errno, $errstr, 30); if (!$fp) { //接続できない場合 } else { fputs ($fp, "GET http://192.168~~/hoge.php HTTP/1.0\r\n"); while (!feof($fp)) { // ~中略~ $buf = fgets ($fp,1000); print $buf; } fclose ($fp); }

    • 締切済み
    • 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
  • fsockopenでsocket_bindって出来ますか?

    fsockopenでsocket_bindって出来ますか? http://questionbox.jp.msn.com/qa4280167.html で以前あがっていた内容を見て、fsockopenでsocket_bindをしたいと思うのですが うまくいきません。 ソケット関数(socket_connect)を使おうかと思ったのですが、それだとセッション中のタイムアウトは設定できても 接続のタイムアウトが設定出来ないため実用的でないと考えました。 やろうと思っている事は上記のURLの方と同様に複数IPアドレス環境下でのHTTPクライアントの 作成です。 fsockopenでのIPアドレスのバインド、もしくはsocket_createでの接続タイムアウトの方法を ご存知の方いらっしゃいましたらアドバイスをよろしくお願いします。

    • 締切済み
    • PHP
  • 8080のサーバーへアクセス可能かチェック

    www.sample.com:8080という風に設定したwebサーバーがありますが ここにアクセスできるかをプログラム中でチェックしたいのですが 例えば10秒アクセスできないといったものですが $fp = fsockopen("www.sample.com", 8080, $errno, $errstr, 10); if (!$fp) { echo "ng<br />\n"; } else { echo "ok<br />\n"; } 以上では8080だとうまくチェックできません、なにかいい方法はないでしょうか?

    • ベストアンサー
    • PHP