How to get info on sent PHP curl request

前端 未结 4 1928
故里飘歌
故里飘歌 2020-12-05 04:22

I\'m trying to debug a curl request to a webservice \'getToken\' endpoint.

I\'m not 100% confident that the URL and the auth info is getting written in to the curl

相关标签:
4条回答
  • 2020-12-05 04:31

    The request is printed in a request.txt with details

    $ch = curl_init();
    $f = fopen('request.txt', 'w');
    curl_setopt_array($ch, array(
    CURLOPT_URL            => $url, 
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FOLLOWLOCATION => 1,
    CURLOPT_VERBOSE        => 1,
    CURLOPT_STDERR         => $f,
    ));
    $response = curl_exec($ch);
    fclose($f);
    curl_close($ch);
    

    You can also use curl_getinfo() function.

    0 讨论(0)
  • 2020-12-05 04:35

    If you set CURLINFO_HEADER_OUT to true, outgoing headers are available in the array returned by curl_getinfo(), under request_header key:

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://foo.com/bar");
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, "someusername:secretpassword");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    
    curl_exec($ch);
    
    $info = curl_getinfo($ch);
    print_r($info['request_header']);
    

    This will print:

    GET /bar HTTP/1.1
    Authorization: Basic c29tZXVzZXJuYW1lOnNlY3JldHBhc3N3b3Jk
    Host: foo.com
    Accept: */*
    

    Note the auth details are base64-encoded:

    echo base64_decode('c29tZXVzZXJuYW1lOnNlY3JldHBhc3N3b3Jk');
    // prints: someusername:secretpassword
    

    Also note that username and password need to be percent-encoded to escape any URL reserved characters (/, ?, &, : and so on) they might contain:

    curl_setopt($ch, CURLOPT_USERPWD, urlencode($username).':'.urlencode($password));
    
    0 讨论(0)
  • 2020-12-05 04:35

    You can also use a proxy tool like Charles to capture the outgoing request headers, data, etc. by passing the proxy details through CURLOPT_PROXY to your curl_setopt_array method.

    For example:

    $proxy = '127.0.0.1:8888';
    $opt = array (
        CURLOPT_URL => "http://www.example.com",
        CURLOPT_PROXY => $proxy,
        CURLOPT_POST => true,
        CURLOPT_VERBOSE => true,
        );
    
    $ch = curl_init();
    curl_setopt_array($ch, $opt);
    curl_exec($ch);
    curl_close($ch);
    
    0 讨论(0)
  • curl_getinfo() must be added before closing the curl handler

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://example.com/bar");
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, "someusername:secretpassword");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLINFO_HEADER_OUT, true);
    curl_exec($ch);
    $info = curl_getinfo($ch);
    print_r($info['request_header']);
    curl_close($ch);
    
    0 讨论(0)
提交回复
热议问题