2013-03-18 14 views
14

私は、URLからのリターンを印刷するためにカールを使用するつもりです。POSTの代わりにカールGETを使用する方法

<?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がありますか?

+0

これは、GET経由で送信するかなり長いクエリ文字列です。あなたはブラウザの長さの制限に遭遇し、それが断頭されているか、または切り詰められていることがわかります。 –

+0

ブラウザで実行するとうまく動作します。 cURLのルールは異なるでしょうか? – Plummer

+0

なぜあなたはダウンボートしますか?私は 'GET'メソッドの' POSTFIELDS'にaltがあるかどうかを尋ねています。 – Plummer

答えて

23
curl_setopt($ch, CURLOPT_POST, 0); 

カールはデフォルトでGETを使用します。あなたはそれをPOSTに設定していました。あなたはcurl_setopt($ch, CURLOPT_HTTPGET, 1);

+0

しかし、郵便はどうですか?私はそれを省略して、URLとともにクエリフィールドを渡しますか? – Plummer

+2

あなたはこの変数を '$ url_final = $ url。 '?' $ url_query;'に修正して、それをあなたの 'curl_setopt($ ch、CURLOPT_URL、$ url_final);で使用します; – AlienWebguy

0

URLに疑問符がありません。また、あなたのURLでそのXMLは、例えば、エンコーディングを必要とする

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

: はようにする必要がありますPHPのurlencode()関数を使用してください。

+0

cURLの例には疑問符がありませんでした。これが必要であると確信していますか? – Plummer

+2

確かに..... ..... – edwardmp

3

使用のfile_get_contents()関数
file_get_contents

それとも
curl_setopt($ch, CURLOPT_HTTPGET, 1);

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

関連する問題