【问题标题】:Problems using cURL in command line, and using it on php在命令行中使用 cURL 并在 php 上使用它的问题
【发布时间】:2014-10-05 00:05:46
【问题描述】:

好吧,我正在尝试从网页中的表单中获取一些结果,我已经登录,在前面的步骤中使用 PHPSESSID 和响应都可以。如果我像这样从命令行执行:

curl "http://domain/"%"27/ajaxform" -H "Cookie: PHPSESSID=l2pgk9rqihvo5n5gf3uq79c5e6" -H "Origin: http://domain" -H "Accept-Encoding: gzip,deflate" -H "Accept-Language: es,en-US;q=0.8,en;q=0.6,es-419;q=0.4" -H "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -H "Accept: */*" -H "Referer: http://domain/inicio" -H "X-Requested-With: XMLHttpRequest" -H "Connection: keep-alive" --data "formName=option1&other=attributes" --compressed > resp.txt

我可以在 resp.txt 文件中得到结果。

但是,在 PHP 中运行它我得到的只是 http_code 500,我在 PHP 中使用以下代码

function check_cdd($optionname, $sessionid){

    $url="http://domain/".urlencode("'")."/ajaxform";
    $cookie="cookie.txt"; 
    $postvars = 'formName='.$optionname.'&other=attributes';
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt ($ch, CURLOPT_TIMEOUT, 60); 
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_ENCODING , "");
    curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postvars); 
    curl_setopt ($ch, CURLOPT_POST, 1); 
    curl_setopt ($ch, CURLINFO_HEADER_OUT, false);  
    curl_setopt ($ch, CURLOPT_HEADER, false);       

    curl_setopt($ch,CURLOPT_HTTPHEADER,array(
        'Cookie: PHPSESSID='.$sessionid,
        'Origin: http://domain',
        'Accept-Encoding:gzip,deflate',
        'Accept-Language: es,en-US;q=0.8,en;q=0.6,es-419;q=0.4',
        'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
        'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
        'Accept: */*',
        'Referer: http://domain/inicio',
        'X-Requested-With: XMLHttpRequest',
        'Connection: keep-alive'));


    $result = curl_exec ($ch); 
    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $header = substr($result, 0, $header_size);




    print("<pre>");
    print_r(curl_error($ch));
    print_r(curl_getinfo($ch));

    echo $result;

    print("</pre>");

    curl_close($ch);}.

我在 PHP 端尝试了不同的参数和选项,但总是得到 500 个代码作为响应,不知道还能尝试什么。提前感谢您的回答

【问题讨论】:

    标签: php ajax web-services curl command-line-arguments


    【解决方案1】:


    500 表示内部服务器错误...所以帮助我调试您的代码,通过从 curl_setopt() 函数中删除 $postvars,它在您的命令行中不存在,我怀疑它可能是服务器错误的根源

    【讨论】:

    • $postvars 是在命令行中使用--data 参数传递的查询字符串,两种情况下的值都是一样的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2013-02-19
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多