2

たとえば、次のようなWebページをダウンロードしようとしています。

http://www.site.com/savings/thispage?OneId=88&SecondId=185

このページでCURLが失敗しています。アンパサンドが原因だと思います。このアンパサンドをエスケープしてダウンロードを完了するにはどうすればよいですか?

エラーはUnable to resolve host

4

2 に答える 2

2

あなたが次のようなことをしているなら

<?php

$url = "http://www.site.com/savings/thispage?OneId=88&SecondId=185";
$encoded = urlencode($url);

// use cURL to fetch $encoded

?>

次に、文字通りcURLにフェッチを要求していますhttp%3A%2F%2Fwww.site.com%2Fsavings%2Fthispage%3FOneId%3D88%26SecondId%3D185。ホスト名を要求パスから区切る「/」文字がないため、これはホスト名として扱われています。

どのようにcURLを起動していますか?PHPライブラリを使用していますか、それともまたはのようなものを実行していますsystem()shell_exec()?起動方法によっては、別の方法で(またはまったくエスケープしないで)エスケープする必要がある場合があります。

実際にコマンドラインから(PHPからではなく)実行している場合は、次のようなものでうまくいくはずです。

curl 'http://www.site.com/savings/thispage?OneId=88&SecondId=185'
于 2012-09-12T18:07:08.473 に答える
2

url_encode();とを見てくださいrawurlencode();

-_ を除くすべての英数字以外の文字を含む文字列を返します。パーセント (%) 記号に置き換えられ、その後に 2 つの 16 進数とプラス (+) 記号としてエンコードされたスペースが続きます。これは、WWW フォームから投稿されたデータがエンコードされるのと同じ方法でエンコードされます。つまり、application/x-www-form-urlencoded メディア タイプと同じ方法です。これは » RFC 3986 エンコーディング (rawurlencode() を参照) とは異なり、歴史的な理由から、スペースはプラス (+) 記号としてエンコードされます。

更新: エラーはであるため、ファイルのアクセス許可が であるUnable to resolve hostことを確認してください。これにより、セキュリティが確保されるだけでなく、Apache/PHP がホスト名を読み取って解決できるようになります。/etc/resolv.conf0644

PHP と Apache が DNS サービスにアクセスできるかどうかを確認するには、次の呼び出しを行います。gethostbyname();

于 2012-09-12T17:22:54.627 に答える