簡體   English   中英

Guzzle 7 - 403 Forbidden(適用於 CURL)

[英]Guzzle 7 - 403 Forbidden (works fine with CURL)

更新:似乎用戶代理不是唯一的 header 一些主機需要為 HTML 提供服務,我還必須添加“接受”Z099FB995346F31C749F6E40DB0F395EZ 解決了許多主機的問題:

  $response = $client->request('GET', 'http://acme.com', ['headers' => ['user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
'accept'=> 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
        ]]);

我正在嘗試使用 Guzzle 檢索一些網站,但收到 403 禁止錯誤(當它們在瀏覽器中正常工作時),我懷疑這是由於主機禁止非標准用戶代理。 為了解決這個問題,我試圖在 Guzzle 中設置 User-Agent 以模仿瀏覽器,但我找不到任何實際有效的方法。 我可以瀏覽網站並使用 WGET 和 CURL -L 下載 HTML 沒有問題,所以問題似乎出在 Guzzle 上。

我試過了:

    $client = new Client(['allow_redirects' => ['track_redirects' => true]]);
    $client->setUserAgent("Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36");
    $response = $client->get($domain_name);

奇怪的是,這個 ^ 導致一個錯誤,似乎說 Guzzle 正在嘗試瀏覽到 User-Agent 值:cURL 錯誤 6:無法解析主機:Mozilla(請參閱https://curl.haxx.se/libcurl/c/ libcurl-errors.html ) Mozilla/5.0%20(Windows%20NT%206.2;%20WOW64)%20AppleWebKit/537.36%20(KHTML,%20like

    $domain_name = 'http://www.' . $domain_name;
    $client = new Client(['headers' => ['User-Agent' => 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36']]);
    $response = $client->get($domain_name);

^導致“客戶端錯誤: GET http://www.xxx.co.uk導致‘403 Forbidden’”錯誤

    $domain_name = 'http://www.' . $domain_name;
    $client = new Client(['allow_redirects' => ['track_redirects' => true]]);
    $client->setServerParameter('user-agent', "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36");
    $response = $client->get($domain_name);

^導致“傳遞給 GuzzleHttp\Client::request() 的參數 3 必須是數組類型,給定字符串”錯誤

    $domain_name = 'http://www.' . $domain_name;
    $client = new Client(['allow_redirects' => ['track_redirects' => true]]);
    $client->setHeader("user-agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36");
    $response = $client->get($domain_name);

^ 還會導致“傳遞給 GuzzleHttp\Client::request() 的參數 3 必須是數組類型,給定字符串”錯誤

有什么建議么? 我想我在這里掉了一個兔子洞!

I'm wondering if something else is going on here because as I understand it, Guzzle is just a wrapper for CURL and CURL can fetch the same web page, from the same IP with no problem.

更新:似乎用戶代理不是唯一的 header 一些主機需要為 HTML 提供服務,我還必須添加“接受”Z099FB995346F31C749F6E40DB0F395EZ 解決了許多主機的問題:

$response = $client->request('GET', 'http://acme.com', ['headers' => ['user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36',
'accept'=>'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9']]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM