POST

2013-03-18 31 views
14

के बजाय कर्ल GET का उपयोग कैसे करें I url से वापसी मुद्रित करने के लिए कर्ल का उपयोग करने के लिए प्रयास कर रहा हूं। कोड मैं अब तक इस तरह दिखता है: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 बजाय POST उपयोग करता है। क्या GET इस विधि के विकल्प हैं?

+0

यह GET के माध्यम से भेजने के लिए एक बहुत लंबी क्वेरी स्ट्रिंग है। आप ब्राउज़र की लंबाई सीमा में भाग सकते हैं और पाते हैं कि इसे क्षीणित या छोटा कर दिया गया है। –

+0

यदि मैं इसे ब्राउज़र में चलाता हूं, तो यह ठीक काम करता है। क्या कर्ल के लिए नियम अलग होंगे? – Plummer

+0

आप क्यों डाउनवोट करेंगे? मैं पूछ रहा हूं कि 'GET' विधि के लिए 'POSTFIELDS' तक कोई alt है या नहीं। – Plummer

उत्तर

23
curl_setopt($ch, CURLOPT_POST, 0); 

कर्ल डिफ़ॉल्ट रूप से जीईटी का उपयोग करता है। आप इसे पोस्ट पर सेट कर रहे थे। अगर आप कभी भी करने के लिए curl_setopt($ch, CURLOPT_HTTPGET, 1);

+0

लेकिन POSTFIELDS के बारे में क्या? क्या मैं बस इसे छोड़ देता हूं और यूआरएल के साथ क्वेरी फ़ील्ड पास करता हूं? – Plummer

+2

हां आप इस var को '$ url_final = $ url' '?'। Url_query; 'के रूप में ठीक करेंगे और फिर अपने 'curl_setopt ($ ch, CURLOPT_URL, $ url_final) में इसका उपयोग करें;' – AlienWebguy

0

आप यूआरएल में एक प्रश्न चिह्न खो रहे हैं। होना चाहिए की तरह:

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

ही, आपका URL में है कि XML एन्कोडिंग, उदा की जरूरत है PHP में urlencode() फ़ंक्शन का उपयोग करें।

+0

curl के उदाहरणों में कोई प्रश्न चिह्न नहीं था। क्या आपको यकीन है कि इसकी आवश्यकता है? – Plummer

+2

काफी यकीन है ..... – edwardmp

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