Tôi đang xóa một số nội dung từ một trang web sau khi gửi biểu mẫu. Vấn đề là các kịch bản là không tất cả bây giờ và sau đó, nói rằng 2 lần trong số 5 kịch bản không thành công. Tôi đang sử dụng php curl, COOKIEFILE và COOKIEJAR để xử lý cookie. Tuy nhiên khi tôi quan sát tiêu đề đã gửi của trình duyệt (khi truy cập trang web mục tiêu từ trình duyệt của tôi và sử dụng tiêu đề http trực tiếp) và tiêu đề được gửi bởi php và thấy có nhiều khác biệt.Tôi làm cách nào để gửi cookie bằng cách sử dụng PHP curl ngoài CURLOPT_COOKIEFILE?
Trình duyệt của tôi đã gửi nhiều biến cookie hơn php curl. Tôi nghĩ rằng sự khác biệt này có thể là do javascript là resposible để thiết lập hầu hết các tập tin cookie, tuy nhiên tôi không chắc chắn về điều này.
Tôi đang sử dụng mã dưới đây để làm cạo và tôi thấy các tiêu đề gửi của trình duyệt của tôi và của php curl:
$ckfile = tempnam ("/tmp", 'cookiename');
$url = 'https://www.domain.com/firststep';
$poststring = 'variable1=4&variable2=5';
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $poststring);
$output = curl_exec ($ch);
curl_close($ch);
$url = 'https://www.domain.com/nextstep';
$poststring = 'variableB1=4&variableB2=5';
$ch = curl_init ($url);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $poststring);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$output = curl_exec ($ch);
$headers = curl_getinfo($ch, CURLINFO_HEADER_OUT);
curl_close($ch);
print_r($headers);
// Gives:
POST /d-cobs-web/doffers.html;jsessionid=7BC2A5277A4EB07D9A7237A707BE1366 HTTP/1.1
User-Agent: Mozilla
Host: domain.subdomain.nl
Accept: */*
Cookie: JSESSIONID=7BC2A5277A4EB07D9A7237A707BE1366; www-20480=MIFBNLFDFAAA
Content-Length: 187
Content-Type: application/x-www-form-urlencoded
// Where live http headers gives:
POST /d-cobs-web/doffers.html;jsessionid=7BC2A5277A4EB07D9A7237A707BE1366 HTTP/1.1
Host: domain.subdomain.nl
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: nl,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: https://domain.subdomain.nl/dd/doffers.html?returnUrl=https%3A%2F%2Fttcc.subdomain.nl%2Fdd%2Fpreferences.html%3FValueChanged%3Dfalse&BEGBA=&departureDate=13-06-2013&extChangeTime=&pax2=0&bp=&pax1=1&pax4=0&bk=&pax3=0&shopId=&xtpage=&partner=NSINT&bc=&xt_pc=&ov=&departureTime=&comfortClass=2&destination=DEBHF&thalysTicketless=&beneUser=&debugDOffer=&logonId=&valueChanged=&iDomesticOrigin=&rp=&returnTime=&locale=nl_NL&vu=&thePassWeekend=false&returnDate=&xtsite=&pax=A&lc2=&lc1=&lc4=&lc3=&lc6=&lc5=&BECRA=&passType2=&custId=&lc9=&iDomesticDestination=&passType1=A&lc7=&lc8=&origin=NLASC&toporef=&pid=&passType4=&returnTimeType=1&passType3=&departureTimeType=1&socusId=&idr3=&xtn2=&loyaltyCard=&idr2=&idr1=&thePassBusiness=false&cid=14812
Content-Length: 219
Cookie: subdomainPARTNER=NSINT; JSESSIONID=CB3FEB3AC72AD61A80BFED91D3FD96CA; www-20480=MHFBNLFDFAAA; campaignPos=5; www-47873=MGFBNLFDFAAA; __utma=1.993399624.1370027094.1370040145.1370082133.5; __utmc=1; __utmz=1.1370027094.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); BCSessionID=5dc05787-c2c8-43e1-9abe-93989970b087; BCPermissionLevel=PERSONAL; __utmb=1.1.10.1370082133
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
AJAXREQUEST=_viewRoot&doffersForm=doffersForm&doffersForm%3AvalueChanged=&doffersForm%3ArequestValid=true&javax.faces.ViewState=j_id3&doffersForm%3Aj_id937=doffersForm%3Aj_id937&valueChanged=false&AJAX%3AEVENTS_COUNT=1&
Tôi muốn sử dụng:
$headers = array();
$headers[] = 'Cookie: ' . $cookie;
và :
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
nơi:
$cookie = 'subdomainPARTNER=NSINT; JSESSIONID=CB3FEB3AC72AD61A80BFED91D3FD96CA; www-20480=MHFBNLFDFAAA; campaignPos=5; www-47873=MGFBNLFDFAAA; __utma=1.993399624.1370027094.1370040145.1370082133.5; __utmc=1; __utmz=1.1370027094.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); BCSessionID=5dc05787-c2c8-43e1-9abe-93989970b087; BCPermissionLevel=PERSONAL; __utmb=1.1.10.1370082133';
Một số thông số trong cookie ở trên tôi có thể xóa nội dung của trang web, nhưng không phải tất cả. Một số người trong số họ tôi có thể đọc từ $ ckfile, nhưng tôi không biết làm thế nào để làm điều đó. Đặc biệt là utma utmc, utmz, utmcsr, utmccn, utmcmd Tôi không thể nhận được từ bất cứ đâu, tôi nghĩ chúng được tạo bởi javascript.
Câu hỏi 1: Tôi có làm gì sai với việc xử lý cookie trong mã hiện tại vì rất ít biến cookie được gửi bởi php curl và nhiều hơn nữa bởi trình duyệt không? Hơn nữa: các khác biệt giữa các tiêu đề được gửi bởi trình duyệt và php curl có phải là một vấn đề để trả về đúng nội dung không?
Câu hỏi 2: Biến số cookie bị thiếu do cài đặt javascript các cookie đó?
Câu hỏi 3: Cách tốt nhất để xử lý cookie để đảm bảo rằng tất cả cookie được yêu cầu sẽ được gửi đến máy chủ từ xa là gì?
Trợ giúp của bạn rất được hoan nghênh!
Bạn đã nhận được bất cứ nơi nào với điều này? Tôi đang gặp vấn đề tương tự - tự hỏi tại sao trình duyệt gửi 3 cookie và curl chỉ gửi 1, mặc dù tệp cookie chứa tất cả 3. – David
Hmmm ... có vẻ như là một vấn đề mà tôi đang gặp phải backpage.com. – TARKUS