2013-03-18 15 views
14

Sto tentando di utilizzare il ricciolo per stampare un ritorno da un url. Il codice che ho sembra così lontano come questo:Come utilizzare arricciare GET invece di 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; 

?> 

l'unico problema evidente So di esso che il server interrogato usa GET invece di POST. Esistono alternative GET a questo metodo?

+0

Questa è una stringa di query piuttosto lunga da inviare tramite GET. potresti imbatterti nei limiti di lunghezza del browser e scoprire che è stato decapitato o troncato. –

+0

Se lo eseguo in un browser, funziona correttamente. Le regole per cURL sarebbero diverse? – Plummer

+0

PERCHÉ vorresti fare un downvote? Sto chiedendo se c'è un alt per 'POSTFIELDS' per il metodo' GET'. – Plummer

risposta

23
curl_setopt($ch, CURLOPT_POST, 0); 

Curl utilizza GET per impostazione predefinita. Lo stavi impostando su POST. È possibile ignorare, se mai hai bisogno di con curl_setopt($ch, CURLOPT_HTTPGET, 1);

+0

Ma che dire dei POSTFIELDS? Devo solo ometterlo e passare i campi della query insieme all'URL? – Plummer

+2

Puoi correggere questo var come '$ url_final = $ url. '?'. $ Url_query;' e quindi usarlo nel tuo 'curl_setopt ($ ch, CURLOPT_URL, $ url_final);' – AlienWebguy

0

Ti manca un punto interrogativo nell'URL. dovrebbe essere come:

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

inoltre, che XML nel tuo URL ha bisogno di codifica, per esempio utilizzare la funzione urlencode() in PHP.

+0

Esempi di cURL non hanno un punto interrogativo. Sei sicuro che sia necessario? – Plummer

+2

Abbastanza sicuro ..... – edwardmp

3

utilizzare file_get_contents() la funzione
file_get_contents

O
curl_setopt($ch, CURLOPT_HTTPGET, 1);

1

uso

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

tutti questi anni e nessuno ha dato il diritto risposta; il modo per creare una stringa di query è utilizzare http_build_query() con un array. Questo automaticamente sfugge a tutto e restituisce una stringa semplice.

$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

Non sono sicuro che sia stato il punto della domanda ma grazie per l'input. – Plummer

Problemi correlati