簡體   English   中英

PHP cURL重定向到localhost

[英]PHP cURL redirects to localhost

我正在嘗試使用帶有cURL的php腳本登錄外部網頁。 我是cURL的新手,所以我覺得我錯過了很多東西。 我找到了一些示例並對其進行了修改以允許訪問https頁面。 最終,我的目標是能夠登錄頁面並在登錄后通過指定的鏈接下載.csv。到目前為止,我所擁有的是一個測試登錄頁面的腳本; 腳本如下所示:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.websiteurl.com/login');
curl_setopt($ch, CURLOPT_POSTFIELDS,'Email='.urlencode($login_email).'&Password='.urlencode($login_pass).'&submit=1');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");
curl_setopt($ch, CURLOPT_REFERER, "https://www.websiteurl.com/login");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);

我有幾個問題。 首先,有沒有一個原因,它不會自行重定向? 我查看頁面內容的唯一方法是

echo $output

即使CURLOPT_RETURNTRANSFER和CURLOPT_FOLLOWLOCATION都設置為True。

其次,頁面的URL保留在“localhost / folderName / test.php”,而不是指向實際的網站。 誰能解釋為什么會這樣? 因為腳本實際上沒有重定向到登錄的網頁,所以我似乎無法做任何我需要做的事情。

我的問題與cookies有關嗎? 我的cookies.txt文件與我的.php腳本位於同一個文件夾中。 (我正在使用wampServer btw)。 它應該位於其他地方嗎?

一旦我能夠解決這兩個問題,似乎我需要做的就是重定向到啟動.csv文件下載過程的鏈接。

感謝您的幫助,非常感謝!

回答你問題的一部分:

來自http://php.net/manual/en/function.curl-setopt.php

CURLOPT_RETURNTRANSFER TRUE將傳輸作為curl_exec()的返回值的字符串返回,而不是直接輸出。

換句話說 - 正是你所描述的。 它將響應返回給字符串,然后echo它以查看它。 按照要求...

-----編輯-----

至於問題的第二部分 - 當我將腳本的最后三行更改為

$output = curl_exec($ch);
header('Location:'.$website);
echo $output;

顯示的頁面地址更改為$website - 在我的情況下是我用來存儲我的等效“ https://www.websiteurl.com/login ”的變量

我不確定這是你想做什么 - 因為我不確定我明白你接下來的步驟是什么。 如果您被登錄站點重定向,新地址不會成為返回標頭的一部分嗎? 您是否需要提取該地址才能執行下一個請求( wget或其他)以下載您想要獲取的文件?

為此,您需要將CURLOPT_HEADER設置為TRUE,

您可以獲取最終的URL

$last_url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); 

(參見cURL,獲取重定向url到變量 )。

相同的鏈接還有一個有用的腳本,用於完全解析標題信息(當CURLOPT_HEADER==true時返回。它在nico limpica的答案中。

結論:如果您將瀏覽器指向某個特定網站,則CURL會獲取您的瀏覽器所收到的信息。 這並不意味着您的瀏覽器表現得就像您將其指向該網站一樣......

暫無
暫無

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

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