Hiển thị tiêu đề yêu cầu Curl POST? Có cách nào để làm việc này không?


87

Tôi đang xây dựng một ứng dụng tự động hóa web Curl và đang gặp một số vấn đề với việc không nhận được kết quả mong muốn của hành động POST của mình, tôi gặp một số khó khăn khi tìm cách hiển thị yêu cầu POST đầy đủ mà tôi đang gửi (có tiêu đề), tôi đã tìm kiếm về điều này nhưng mọi thứ xuất hiện là tiêu đề phản hồi, thực sự tôi cũng muốn những tiêu đề này nhưng cũng có yêu cầu, mà không có bài đăng nào tôi tìm thấy trên google dường như đề cập đến ..

Tôi biết tôi có thể hiển thị kết quả của một yêu cầu curl bằng cách sử dụng một cái gì đó như thế này (tha thứ cho tôi nếu cú ​​pháp của tôi bị tắt, tôi đã tắt máy ảo của mình với mã và mã của tôi để tham khảo

 $result = curl($curl_exect) ;

Dù sao, tôi sẽ đánh giá rất cao bất kỳ lời khuyên nào về cách xem các tiêu đề đầy đủ, cảm ơn


Câu trả lời:


83

Bạn có thể xem thông tin liên quan đến việc chuyển nhượng bằng cách thực hiện:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

trước khi yêu cầu, và

$information = curl_getinfo($curl_exect);

sau khi yêu cầu

Xem: http://www.php.net/manual/en/ Chức năng.curl-getinfo.php

Bạn cũng có thể sử dụng CURLOPT_HEADERtrongcurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

Đây chỉ là một số phương pháp sử dụng tiêu đề.


4
Tôi cố gắng này, nhưng nó chỉ ouputs một mảng của POST vì vậy nó không hiển thị các tiêu đề chính xác, chỉ có POST và không chính xác như máy chủ tiếp nhận sẽ nhìn thấy nó vì vậy không lý tưởng của nó để gỡ rối
Rick

5
Câu trả lời là không đầy đủ. Trước khi yêu cầu được thực thi, bạn phảicurl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch

1
điều này chỉ hiển thị những gì máy chủ đã gửi lại. có vẻ như curl_setopt ($ ch, CURLOPT_VERBOSE, true); sẽ cho phép bạn xem những gì bạn gửi đến máy chủ.
Steven Teo

169

Đây là tất cả những gì bạn cần:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking
... // do curl request    
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT ); // request headers

6
Làm cách nào để có thể hiển thị cả dữ liệu POST? Tức là được thêm bởi curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ postData);
Dan Dascalescu

@DanDascalescu Vì bạn đã ĐĂNG dữ liệu nên khi tạo yêu cầu Curl, bạn không cần chụp lại. Lưu ý: Các giá trị biểu mẫu ĐĂNG được gửi dưới dạng "Dữ liệu biểu mẫu", không phải tiêu đề, do đó, tại sao ở trên không hiển thị chúng. Nếu bạn thực sự cần xem những gì trên dây, hãy thử WireShark.
Joseph Lust

10

Bạn có thể lưu tất cả các tiêu đề được gửi bằng curl vào một tệp bằng cách sử dụng:

$f = fopen('request.txt', 'w');
curl_setopt($ch,CURLOPT_VERBOSE,true);
curl_setopt($ch,CURLOPT_STDERR ,$f);

6

Bạn có thể yêu cầu bạn tự mình yêu cầu tiêu đề bằng cách sử dụng:

// open a socket connection on port 80
$fp = fsockopen($host, 80);

// send the request headers:
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Referer: $referer\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

$result = ''; 
while(!feof($fp)) {
    // receive the results of the request
    $result .= fgets($fp, 128);
}

// close the socket connection:
fclose($fp);

Giống như viết về cách thực hiện yêu cầu


Cảm ơn vì bài đăng, tôi đoán tôi không hiểu đầy đủ về điều này vì nó là một thư viện khác với curl, phải không? Có cách nào để làm điều này chỉ với cuộn tóc không? Nếu không, tôi sẽ nhìn vào thực hiện nó theo cách này, nó chỉ là tôi không quen thuộc với fputs
Rick

Đây thực sự là chức năng gốc của php
SSH Đây là

1
Đây là một câu trả lời tuyệt vời vì nó cho thấy loại yêu cầu thô. Tôi luôn được dạy sử dụng cURL, một thư viện đôi khi phải cài đặt và không phải lúc nào cũng có sẵn.
Altimus Prime

2

Gần đây, tôi cũng gặp phải vấn đề tương tự và tôi đã cài đặt Wireshark (nó là một công cụ giám sát mạng). Bạn có thể xem mọi thứ với điều này, ngoại trừ lưu lượng được mã hóa (HTTPS).


2
WireShark chạy trên WinCap hoặc các hệ thống thu khác, bạn phải có chipset dựa trên động mạch để nó hoạt động Tôi nghĩ vậy, tại sao bạn không cài đặt chrome và nhấn Ctrl+Shift+Jsau đó nhấp vào XHRNút và tên tệp, sau đó xem tiêu đề và dữ liệu.
RobertPitt

Tôi cố gắng Wireshark nhưng nó dường như không nhận ra giao thông Curl POST của tôi
Rick

Tôi giả định rằng bạn đang làm việc trên một máy chủ cục bộ, có phải vậy không?
greg0ire

Robert, tôi đang cố gắng thực hiện những gì bạn đã nói trong Chrome, nhưng nó không hiệu quả khi tôi nhấn Ctrl + Shift + 3, tôi đang tìm kiếm thông tin về điều này nhưng dường như không thể tìm thấy thứ gì đó có liên quan, tính năng nào của chrome đây là quyền truy cập? Cảm ơn
Rick

Được rồi, tôi đã tìm thấy điều này liên quan đến việc xem các tiêu đề trong Chrome: google.com/support/forum/p/Chrome/… Tôi tin rằng Ctrl + Shift + i của nó để truy cập vào phần này
Rick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.