我寫了一個PHP腳本,使用curl
使得HTTP POST請求,並執行以下操作,大卷曲響應處理 - PHP
- 準備後變量
- 初始化捲曲
- 設置客戶端的cookie的使用請
- 設置POST變量作爲查詢字符串
- 設置其他捲曲選項
- 執行卷曲
下面是代碼:
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_COOKIE, "cookie=cookie");
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_string);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
// this point
extr ($response, $param_1, $param_2);
問題是,有時響應是大於1GB,所以PHP代碼暫停,直到被接收完整的響應(在代碼// this point
示出),並且如果有錯誤的HTML接收,所以PHP產生錯誤,這裏所有的事情都需要從頭開始。
這裏是功能其餘:
function extr($string = '',$a,$b)
{
$doc = new DOMDocument;
@$doc -> loadHTML($string);
$table = $doc -> getElementById('myTableId');
if(is_object($table)):
foreach ($table->getElementsByTagName('tr') as $record)
{
$rec = array();
foreach ($record->getElementsByTagName('td') as $data)
{
$rec[] = $data -> nodeValue;
}
if ($rec)
{
put_data($rec);
}
}
else:
{
echo 'Skipped: Param1:'.$a.'-- Param2: '.$b.'<br>';
}
endif;
}
function put_data($one = array())
{
$one = json_encode($one) . "\n";
file_put_contents("data.json", $one, FILE_APPEND);
}
ini_set('max_execution_time', 3000000);
ini_set('memory_limit', '-1');
我能想到的另一種方法是處理數據,因爲它接收,如果可能的話,使用捲曲,或繼續從先前的狀態前面的捲曲請求。
有沒有可能的解決方法呢?
我需要切換到PHP以外的任何其他語言嗎?
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function(&$ch, $data) {
echo "\n\nchunk received:\n", $data; // process your chunk here
return strlen($data); // returning non-positive number aborts further transfer
});
正如在評論中已經提到不過,如果您的響應內容類型是,你加載到HTML:
你可以使用字節服務,並要求只有小塊整個文件,但是因爲您然後將這些塊加載到DOM中,所以無論如何您都需要整個文件。如果您輸入不完整的文檔,dom會禁止。 –
您要求什麼,可能會超過1GB的大小? (當然,HTTP是正確的協議呢?) – CBroe
我正在尋找Web服務中的安全漏洞,並找到一個,通過HTTP POST泄漏分析數據,我只需要在MySQL表中收集它們 – Viral