phpのfile_get_contentsで、

空白を含むURLの取得がうまくいきません。

浜崎 あゆみ

とかを、utf8にして、urlencodeして、file_get_contentsしているのですが、

failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request

が返ってきます。
空白が無いワードだと一応取得できるのですが・・・。

空白もurlencode、またはrawurlencodeしているのですが、何故かうまくいきません。

何か解決に向けて、アドバイス頂けると助かります。

回答の条件
  • 1人5回まで
  • 登録:2007/08/07 23:13:51
  • 終了:2007/08/08 16:35:22

回答(2件)

id:ManalTencho No.1

ManalTencho回答回数129ベストアンサー獲得回数92007/08/07 23:21:02

ポイント18pt

urlencode() の代わりに rawurlencode() ではダメでしょうか?

id:onigirin

どうもありがとうございます。

質問文にも書きましたが、両方ともうまくいかないです。

2007/08/07 23:25:19
id:Yota No.2

Yota回答回数453ベストアンサー獲得回数282007/08/08 10:58:36

ポイント52pt

浜崎 あゆみ(姓名の間にスペース)

%E6%B5%9C%E5%B4%8E+%E3%81%82%E3%82%86%E3%81%BF(urlencode)

%E6%B5%9C%E5%B4%8E%20%E3%81%82%E3%82%86%E3%81%BF(rawurlencode)

わたしのサーバでは下のほうなら、file_get_contents()できます。

まずは、ブラウザからそのファイルにアクセスしてみてください。

http://localhost/%E6%B5%9C%E5%B4%8E%20%E3%81%82%E3%82%86%E3%81%B...

それと、URLが違うなら404 Not Foundが返ってくるはずですが、

400 Bad Request

というのはなぜかと考えるのですが、サーバApacheであるとして、access_logにGETリクエストでどんなURLを呼んでいるか見てみてください。

id:onigirin

どうもありがとうございます。

質問文に書き忘れていましたが、

ヤフー等の検索結果を取得しています。

一応、

http://search.yahoo.co.jp/bin/search?p=%E6%B5%9C%E5%B4%8E%20%E3%...

をブラウザに入れると検索結果は表示されますが、

file_get_contentsできなくて、

Bad Requestがよくわからないです・・・。

生ログ見ましたが、get?url=上記のURL

で普通にリクエストされていました。

ブラウザにURLを表示しようとしたところ、

shift_jisで出力しているのでエンコード部分が文字化け、文字コードをshift-jisにして読み直すと、日本語になってしまっていました。

2007/08/08 16:08:49
  • id:kn1967
    (1)URLエンコードしたものを画面にでも吐き出させて
      それをブラウザのアドレス欄に貼り付けた場合
    (2)プログラムからではなく正規の手順で行った場合
    といった場合の内容と比較検討すれば良いだけの事だと思うけど?

    その結果として例えば
    全角スペースと半角スペースの違いとか意外な点が
    原因だったりするかもしれない。。。

    軽口なので以上コメントで。
  • id:tezcello
    うちの環境では
    $str = '浜崎 あゆみ';
    $str1 = mb_convert_encoding($str, 'UTF-8', 'SJIS');
    $str2 = urlencode($str1);
    $source = file_get_contents('http://www.google.com/search?hl=ja&client=safari&rls=ja-jp&q='.$str2.'&btnG=検索&lr=lang_ja');

    で問題なく取得出来ました。

    allow_url_fopen がOFFになっているとかは大丈夫ですか?
  • id:onigirin
    どうもありがとうございます。

    順に試していった結果、正常に動くようになりました。

    bad requestなので、プログラムで「データを受け取る」「ヤフーにデータを投げる」時の処理を書き直してみたら、直りました。

    たぶんurlencodeとか文字コード変換とかするタイミングが
    おかしかったのかもしれません。

    いろいろアドバイス頂いて、どうもありがとうございました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません