2013-03-18 115 views
14

我正在使用curl来打印来自url的返回。我到目前为止的代码看起来是这样的:如何使用curl GET而不是POST

<?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而不是POSTGET是否有替代方法?

+0

这是一个很长的查询字符串通过GET发送。您可能会遇到浏览器长度限制,并发现它已被删除或截断。 – 2013-03-18 21:22:24

+0

如果我在浏览器中运行它,它工作正常。 cURL的规则会有什么不同? – Plummer 2013-03-19 14:06:47

+0

为什么你会低调?我在问'GET'方法是否有'POSTFIELDS'。 – Plummer 2013-03-19 14:37:40

回答

23
curl_setopt($ch, CURLOPT_POST, 0); 

curl默认使用GET。你将它设置为POST。您可以覆盖它,如果你以往任何时候都需要与curl_setopt($ch, CURLOPT_HTTPGET, 1);

+0

但是POSTFIELDS呢?我是否忽略了这一点,并将查询字段与URL一起传递? – Plummer 2013-03-19 14:01:55

+2

你会修正这个变量为'$ url_final = $ url。'?'。$ url_query;'然后在你的'curl_setopt($ ch,CURLOPT_URL,$ url_final)中使用它'' – AlienWebguy 2013-03-19 17:15:27

0

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

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

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

+0

cURL的示例没有问号。你确定这是需要吗? – Plummer 2013-03-19 14:08:15

+2

很确定..... – edwardmp 2013-03-20 00:15:14

1

使用

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

这些年来,没有人给了正确的回答;构建查询字符串的方法是使用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"; 
+0

不确定那是问题的一点,但感谢您的意见。 – Plummer 2018-03-08 21:35:13

相关问题