功能。我想POST数据过去查询邮政包裹的寄送费用。但是出现了异常。。type Exception reportmessagedescription The server encountered an internal error () that prevented it from fulfilling this request.exceptionorg.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:433)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
root causejava.lang.NullPointerException
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.25 logs.##############################################################
CODE如下:
$url = 'http://219.141.228.197:8080/express/maincheck_pk.jsp' ;
$fields = array(
'radiobutton'=>'2',
'addr1'=>'福田区',
'addr2'=>'龙岗区'
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&' ; }
rtrim($fields_string ,'&') ;
//open connection
$ch = curl_init() ;
//set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL,$url) ;
curl_setopt($ch, CURLOPT_POST,count($fields)) ;
curl_setopt($ch, CURLOPT_POSTFIELDS,$fields_string) ;
//execute post
$result = curl_exec($ch) ;
//close connection
curl_close($ch); 请能人帮忙。。

解决方案 »

  1.   

    'http://219.141.228.197:8080/express/maincheck_pk.jsp' 执行的查询有问题,可能是你送过去的$fields_string参数不正确.
      

  2.   

    多谢回复,还有一个现象,我把参数都传过去了。但是没有返回值。
    CURL是怎么产生返回值的呢
      

  3.   

    需要在执行前加入下面的设置:
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      

  4.   

    加入了
    var_dump($result);的结果是 string(0) ""没加的话
    我输出$ch的话结果是:resource(5) of type (Unknown)
    就是没拿到想要的返回值
      

  5.   

    string(0)应该就是maincheck_pk.jsp的返回,但是你发送给jsp文件的参数不对。你应该用firefox去访问maincheck_pk.jsp,然后用firebug去捕获浏览器发给这个jsp文件的参数。
      

  6.   

    现在的代码是这样了:
    extract($_POST) ;
    //set POST variables
    $url = 'http://219.141.228.197:8080/express/maincheck_pk.jsp';
    $fields = array(
    'radiobutton'=>'2',
    'addr1'=>'福田区',
    'addr2'=>'龙岗区',
    'kg'=>'1'
    );
    //url-ify the data for the POST
    foreach($fields as $key=>$value) { $fields_string.=$key.'='.$value.'&'; }
    rtrim($fields_string,'&');
    //open connection
    $ch = curl_init();
    //set the url, number of POST vars, POST data
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST,count($fields));
    curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
    //execute post
    $result = curl_exec($ch);
    //close connection
    curl_close($ch); 
    //$curl_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); var_dump($result);
    //结果:string(0) ""参数自己按submit提交的是OK。。
    第一次用CURL。。
      

  7.   

    因为页面提交POST数据之后,页面发生了跳转,要多加上curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);function vpost($url,$data){ // 模拟提交数据函数    
        $curl = curl_init(); // 启动一个CURL会话    
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址                
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查    
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在    
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器    
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转    
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer    
        curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求    
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包    
        curl_setopt($curl, CURLOPT_COOKIEFILE, $GLOBALS['cookie_file']); // 读取上面所储存的Cookie信息    
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环    
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容    
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回    
        $tmpInfo = curl_exec($curl); // 执行操作    
        if (curl_errno($curl)) {    
           echo 'Errno'.curl_error($curl);    
        }    
        curl_close($curl); // 关键CURL会话    
        return $tmpInfo; // 返回数据    

    例子
    echo $table = vpost($url,$fields_string);