-1

PHPを使用して、次の画像をダウンロード/保存しようとしています:

http://www.bobshop.nl/catalog/product_image.php?size=detail&id=42428

この画像をブラウザにロードすると表示されますが、いくつかの異なる方法でダウンロードしようとすると、製品がサーバー上に見つからないという 1 KB のファイルが表示されます。

file_put_contentsこれを theと the curlwayの両方で試しました。get_web_pageStackOverflow のどこかで見つけた関数を使用して、リダイレクトの可能性をキャッチしました。

ブラウザで画像を見ることはできるが、ダウンロードする方法がないのは、他に何が考えられるでしょうか?

更新: さまざまな回答を試したときにスローされたエラーのおかげで、問題の本当の原因がわかりました。html をスクレイピングする過程のどこかで、URL が&の代わりに&。私は今これらを交換し、他のすべての方法も機能するようになりました...すべてに感謝します!

4

2 に答える 2

0

ダウンロードして保存する簡単な方法を実装したところ、うまくいきました:

<?php

$fileContent = implode("",file("http://www.bobshop.nl/catalog/product_image.php?size=detail&id=42428"));
$fp = fopen("/tmp/image","w+");

fwrite($fp, $fileContent);

fclose($fp);

?>

プロキシの背後にいますか? これが問題である可能性があります(プロキシが構成されていますが、phpは構成されていません);)

于 2012-06-16T23:45:44.947 に答える
0

この PHP スクリプトでは、何らかのヘッダー チェックが行われており、誰かがコンテンツをスクレイピングしようとしているのではなく、ブラウザーが画像を要求していることを確認しています。これは、cURL を使用して偽造することができます (ただし、このようなことをした後は、シャワーを浴びる必要があるように感じます)。具体的にはcurl_setopt()

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'User-agent: Some legitimate string'
));

どのヘッダーを送信する必要があるかを確認するには、いくつかの実験を行う必要があります。Google Chrome を使用している場合は、おそらく Inspector を使用したことがあります (使用していない場合は、Firefox に同様のアドオンがあるため、Firebug などを使用できます)。Chrome で画像をリクエストすると、右クリックして検査できます。[ネットワーク] タブに移動します。ページを更新します。へのリクエストproduct_image.phpが表示されます。それをクリックして [ヘッダー] タブをクリックすると、送信されたヘッダーのリストが表示されます。私のブラウザは、、、、、およびをUser-Agent送信します。AcceptAccept-EncodingAccept-LanguageAccept-Charset

ここに画像の説明を入力

これらのヘッダーと有効な値の組み合わせを試して、画像を返すために送信する必要があるヘッダーを確認してください。このサイトはおそらくチェックするだけUser-agentなので、そのサイトから始めてください.


重要な注意:この呼び出しの結果をキャッシュする必要があります。これは、サーバーが画像を立て続けに複数回要求した場合 (たとえば、サイトの多くのユーザーがこの画像を取得するスクリプトを要求した場合) は非常に疑わしいためです。また、匿名性の追加レイヤーとして、User-agent有効なものの配列から選択して、bobshop.nl がすべての要求が大規模なネットワーク (大学のキャンパスなど) の背後にあるユーザーから来ていると見なすようにすることもできます。UserAgentString.comで有効なユーザー エージェント文字列を見つけることができます。

于 2012-06-16T23:47:39.267 に答える