आपको सामग्री-लंबाई स्वयं को सेट करने की आवश्यकता नहीं है। यदि आप एक HTTP पोस्ट भेजने के लिए curl का उपयोग करते हैं, तो यह आपके लिए सामग्री की लंबाई की गणना करेगा।
यदि आप CURLOPT_POSTFIELDS
मान को सरणी के रूप में सेट करते हैं, तो यह स्वचालित रूप से multipart/form-data
के रूप में अनुरोध सबमिट करेगा और सीमा का उपयोग करेगा। यदि आप एक स्ट्रिंग पास करते हैं, तो यह application/x-www-form-urlencoded
का उपयोग करेगा, इसलिए सुनिश्चित करें कि आप urlencoded स्ट्रिंग को CURLOPT_POSTFIELDS
पर पास करें और एक सरणी नहीं है क्योंकि आप फॉर्म-urlencoded चाहते हैं।
आप की जरूरत है ऐसा करने के लिए किया जा:
$data = 'name=' . urlencode($value) . '&name2=' . urlencode($value2);
curl_setopt($this->hCurl, CURLOPT_POSTFIELDS, $data);
// NOT
$dataArray = array('name' => 'value', 'name2' => 'value2');
curl_setopt($this->hCurl, CURLOPT_POSTFIELDS, $dataArray);
या तो मामले में, आप सामग्री की लंबाई निर्धारित करने की आवश्यकता नहीं है, लेकिन आप पहली विधि का उपयोग करने के लिए फार्म पर application/x-www-form-urlencoded
एन्कोडिंग निकलना है।
अगर वह मदद नहीं करता है, सभी कोड कर्ल अनुरोध, स्थापित करने के लिए प्रासंगिक पोस्ट (सभी विकल्प, और डेटा आप इसे करने के गुजर रहे हैं) और कहा कि समस्या का समाधान में मदद मिलेगी।
संपादित करें:
जोड़ा एक उदाहरण मैं (मैं लॉगिन विफल हो) कि काम करता है के साथ आया है।
<?php
$URL_HOME = 'http://ilocalis.com/';
$LOGIN_URL = 'https://ilocalis.com/login.php';
$ch = curl_init($URL_HOME);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$home = curl_exec($ch);
//echo $home;
$post = array('username' => 'drew', 'password' => 'testing 123');
$query = http_build_query($post);
curl_setopt($ch, CURLOPT_URL, $LOGIN_URL);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
$login = curl_exec($ch);
echo $login;
आपकी टिप्पणी के लिए धन्यवाद, मुझे नहीं पता था कि एक सरणी पास करने और स्ट्रिंग को पार करने के बीच एक अंतर है। लेकिन http_build_query ($ सरणी) भी काम करना चाहिए, है ना? वैसे भी - दुर्भाग्यवश, यह या तो काम नहीं किया। जब मैं सामग्री-लंबाई स्वयं निर्दिष्ट नहीं करता हूं, तो पृष्ठ "HTTP त्रुटि 411 लंबाई आवश्यक" त्रुटि लौटा रहा है। मैं http://ilocalis.com/ पर लॉग इन करने का प्रयास कर रहा हूं (https://ilocalis.com/login.php पर पोस्ट करना) - यदि आप इसे स्वयं आज़माएं, तो आपको खाते की आवश्यकता नहीं है क्योंकि मैं भी पृष्ठ लोड करने के उस बिंदु पर न आएं और जांच करें कि दिए गए प्रमाण-पत्र सही थे या नहीं ... धन्यवाद! – Simon
चूंकि सामग्री की लंबाई सेट नहीं की गई थी, इसलिए मुझे आश्चर्य है कि अनुरोध विधि पोस्ट नहीं है, या शायद कुछ अन्य विकल्प उस पर ओवरराइड कर रहा है। किसी भी मामले में, मैंने एक कामकाजी उदाहरण के साथ पोस्ट को अद्यतन किया। उम्मीद है कि यह आपको सही रास्ते पर ले जाएगा। यह 2 अलग-अलग अनुरोध करने के लिए 1 कर्ल ऑब्जेक्ट का उपयोग करता है। नोट, यदि आपको फिर से एक GET क्वेरी बनाने की आवश्यकता है, तो आपको CURLOPT_POST को 0 – drew010
पर सेट करना होगा। आप। इसलिए। बहुत। मैंने पेड़ों के लिए जंगल नहीं देखा। मैंने curlopt_customrequest को "POST" पर सेट किया क्योंकि मैं curlopt_postfields में एक सरणी पास करता था ..... जैसा कि आपने पहले ही उल्लेख किया है, एक स्ट्रिंग का उपयोग करने के साथ इसे काम करना चाहिए, लेकिन मैं गोपनीय रूप से कस्टम चीज को हटाने के लिए भूल गया .. यह छोटी चीजें हैं जो सनकी हमारे प्रोग्रामर से बाहर निकलते हैं जब हमें नहीं मिलता कि यह क्यों काम नहीं करेगा ..;) – Simon