如何使用curl GET而不是POST

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用curl GET而不是POST相关的知识,希望对你有一定的参考价值。

我正在尝试使用curl从url打印返回。到目前为止我的代码看起来像这样:

<?php
    $street = $_GET['street'];
    $city = $_GET['city'];
    $state = $_GET['state'];
    $zip = $_GET['zip'];

    $url = 'http://eligibility.cert.sc.egov.usda.gov/eligibility/eligibilityservice';
    $query = 'eligibilityType=Property&requestString=<?xml version="1.0"?><Eligibility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="/var/lib/tomcat5/webapps/eligibility/Eligibilitywsdl.xsd"><PropertyRequest StreetAddress1="'.$street.'" StreetAddress2="" StreetAddress3="" City="'.$city.'" State="'.$state.'" County="" Zip="'.$zip.'" Program="RBS"></PropertyRequest></Eligibility>';
    $url_final = $url.''.$url_query;

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS,$query);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $return = curl_exec ($ch);
    curl_close ($ch);

    echo $return;

?>

我所知道的唯一明显的问题是被查询的服务器使用GET而不是POST。是否有GET替代这种方法?

答案
curl_setopt($ch, CURLOPT_POST, 0);

Curl默认使用GET。您将其设置为POST。如果你需要使用curl_setopt($ch, CURLOPT_HTTPGET, 1);,你可以覆盖它

另一答案

使用file_get_contents()函数 file_get_contents

要么 curl_setopt($ch, CURLOPT_HTTPGET, 1);

另一答案

使用

curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => "http://yourlink.com",
CURLOPT_USERAGENT => 'Codular Sample cURL Request'));
另一答案

这些年来,没有人给出正确的答案;构建查询字符串的方法是将http_build_query()与数组一起使用。这会自动转义所有内容并返回一个简单的字符串。

$xml = '<?xml version="1.0"?><Eligibility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="/var/lib/tomcat5/webapps/eligibility/Eligibilitywsdl.xsd"><PropertyRequest StreetAddress1="'.$street.'" StreetAddress2="" StreetAddress3="" City="'.$city.'" State="'.$state.'" County="" Zip="'.$zip.'" Program="RBS"></PropertyRequest></Eligibility>';
$data = [
    "eligibilityType" => "Property",
    "requestString" => $xml
];
$query = http_build_query($data);
$url .= "?$query";
另一答案

您在URL中缺少问号。应该是这样的:

$query = '?eligibilityType=Property&...';

此外,您的网址中的XML需要编码,例如在PHP中使用urlencode()函数。

以上是关于如何使用curl GET而不是POST的主要内容,如果未能解决你的问题,请参考以下文章

html中post必须要用form表单,而get就可以不用form表单就可以提交了吗?

如何使以下按钮调用 GET 方法而不是 POST 方法?

Ajax 发送 GET 而不是 POST

Angularjs `$http` 发送 POST 而不是 GET

python-requests 发出 GET 而不是 POST 请求

Response.Redirect 使用 POST 而不是 Get?