2010-06-16 37 views
5

Tôi đang sử dụng tập lệnh cURL để gửi dữ liệu POST qua proxy tới tập lệnh và tôi muốn xem tiêu đề HTTP thô mà tập lệnh cURL đang gửi. Danh sách những điều tôi đã thử:Làm cách nào để đăng nhập tiêu đề HTTP thô bằng tập lệnh PHP?

  • echo curl_getinfo($ch, CURLINFO_HEADER_OUT) không có đầu ra.
  • file_get_contents('php://input') nhận một số tiêu đề HTTP nhưng không phải tất cả.
  • print_r($_SERVER) cũng được một số tiêu đề HTTP nhưng không phải tất cả (Tôi biết điều này vì cần có một tiêu đề X-Forwarded-For và không có)
  • In ấn tất cả superglobals ($ _POST, $ _GET, $ _REQUEST, $ _FILES vv) vẫn không hiển thị tiêu đề HTTP thô.
  • http_get_request_headers(), apache_request_headers(), $http_response_header, $HTTP_RAW_POST_DATA không xuất ra mọi thứ.

Trợ giúp?

Trả lời

1

Bạn cũng cần phải thiết lập các tùy chọn CURLINFO_HEADER_OUT:

CURLINFO_HEADER_OUT
TRUE để theo dõi chuỗi yêu cầu xử lý của.
Có sẵn kể từ PHP 5.1.3. Tiền tố CURLINFO_ là cố ý.

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

Các công trình sau đây:

<?php 

$ch = curl_init('http://www.google.com'); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$result = curl_exec($ch); 

echo curl_getinfo($ch, CURLINFO_HEADER_OUT); 
+1

@php: ah, vì vậy bạn thực sự muốn biết proxy đang gửi gì, chứ không phải những gì curl đang gửi. bạn có thể cần phải đăng nhập vào proxy hoặc máy chủ từ xa. curl không biết tiêu đề proxy của bạn thêm –

0

Nếu bạn chạy như một mô-đun trên Apache sau đó apache_request_headers() làm những gì bạn cần.

Đối với bất kỳ kiến ​​trúc nào khác, bạn chỉ có thể chọn những thứ được ghi trong $ _SERVER hoặc bạn sẽ cần phải tìm cách nào đó để ghi lại thông tin bằng cách sử dụng cấu hình máy chủ web.

+2

Bạn phải là người hâm mộ của C. – Pacerier

3

Bật CURLOPT_HEADER, không CURLINFO_HEADER_OUT, sau đó tách trên \ r \ n \ r \ n (đó là nơi mà các tiêu đề kết thúc) với một số chia tối đa là 2:

<?php 
$ch = curl_init('http://www.yahoo.com/'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
$result = curl_exec($ch); 
if ($result !== false) { 
    $split_result = split("\r\n\r\n", $result, 2); 
    $header = $split_result[0]; 
    $body = $split_result[1]; 
    /** Process here **/ 
} else { 
    /** Error handling here **/ 
} 
+0

điều này về cơ bản là đúng, ngoại trừ bạn nên sử dụng phát nổ thay vì chia nhỏ và không tính nhiều tiêu đề (chẳng hạn như chuyển hướng 301/302) – cwd

Các vấn đề liên quan