使用PHP CURL将数据发布到外部URL并重定向

时间:2016-05-03 06:50:30

标签: php curl

这是我的情景。 我有一个外部网址:https://staging.mead.com.ph/login/sso 现在我必须将数据发布到该URL,假设如下所示:

  1. 名称
  2. 类型
  3. Mobile Num
  4. 现在,发布后我必须被重定向到 [redirect_url]在curl_getinfo()中。 [redirect_url]具有以下值: https://staging.mead.com.ph/login/key=abcde

    然而,在回应了curl_exec的结果之后,它说" 对象移动到这里 "和" HERE "重定向到 https://myservername/login/key=abcde 而不是 https://staging.mead.com.ph/login/key=abcde

    这是我的代码:

    $url    =  "https://staging.mead.com.ph/login/key=abcde";
    $token  = "token1234";
    $params = array(
        "Name" => "Ana",
        "Type" => "A",
        "Mobilenum" => "0919123456"
        );
     foreach($params as $key => $value) { 
        $fields .= $key . '=' . $value . '&'; 
     }
     rtrim($fields, '&');
     $post = curl_init();
    
     curl_setopt($post, CURLOPT_URL, $url);
     curl_setopt($post, CURLOPT_POST, count($params));
     curl_setopt($post, CURLOPT_POSTFIELDS, $fields);
     curl_setopt($post, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($post, CURLOPT_SSL_VERIFYPEER, false);
     curl_setopt($post, CURLOPT_SSL_VERIFYHOST, false); 
     curl_setopt($post, CURLOPT_FOLLOWLOCATION, true);  
    
     curl_setopt($post, CURLOPT_PROXYUSERPWD, PROXY_AUTH);
     curl_setopt($post, CURLOPT_PROXY, PROXY_URL);
     curl_setopt($post, CURLOPT_PROXYPORT, PROXY_PORT);
     curl_setopt($post, CURLOPT_TIMEOUT,6);
    
     $result = curl_exec($post);
    
     echo $result;
    
     curl_close($post);
    

    可能有什么不对?提前谢谢。

1 个答案:

答案 0 :(得分:1)

更新

这是否有原因:

 curl_setopt($post, CURLOPT_PROXYUSERPWD, PROXY_AUTH);
 curl_setopt($post, CURLOPT_PROXY, PROXY_URL);
 curl_setopt($post, CURLOPT_PROXYPORT, PROXY_PORT);

如果是这样,您需要使用正确的参数,否则删除它们。

-------更新结束---------

有很多事情可能会出错。有一种方法可以排除故障。

添加以下选项:

curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

然后获取标题,响应和统计信息

$requestHeaderText = curl_getinfo($ch, CURLINFO_HEADER_OUT); 
$skip = intval(curl_getinfo($ch, CURLINFO_HEADER_SIZE)); 
$responseHeaderText = substr($data,0,$skip);
$response = substr($data,$skip);
$stats = curl_getinfo($ch);

在重定向标题中,您会看到“位置”,这是您重定向的位置。

您可以尝试curl_setopt($post, CURLOPT_POSTFIELDS, $params); this will change the request内容类型to multipart / form-data`

通常会在重定向页面上设置Cookie。在响应标题中查找SET-COOKIE。如果有cookie,则需要使用CURLOPT_COOKIEJAR

还要在响应中查找javascript。有时重定向是在执行安全检查等时使用javascript完成的。​​

您可能希望将curl_setopt($post, CURLOPT_FOLLOWLOCATION, true);更改为false。然后,您只会获得第一个请求的标题和统计信息。