PHP गूज़लेहटप। परमों के साथ पोस्ट अनुरोध कैसे करें?


103

GuzzleHttp (संस्करण 5.0) के साथ पोस्ट अनुरोध कैसे करें।

मैं निम्नलिखित करने की कोशिश कर रहा हूं:

$client = new \GuzzleHttp\Client();
$client->post(
    'http://www.example.com/user/create',
    array(
        'email' => 'test@gmail.com',
        'name' => 'Test user',
        'password' => 'testpassword'
    )
);

लेकिन मुझे त्रुटि मिल रही है:

PHP घातक त्रुटि: संदेश के साथ 'अपवाद अमान्य' अपवाद 'कोई विधि ई-मेल कुंजी नहीं संभाल सकता'

जवाबों:


94

इसे इस्तेमाल करे

$client = new \GuzzleHttp\Client();
$client->post(
    'http://www.example.com/user/create',
    array(
        'form_params' => array(
            'email' => 'test@gmail.com',
            'name' => 'Test user',
            'password' => 'testpassword'
        )
    )
);

90
यह विधि अब 6.0 में पदावनत हो गई है। 'शरीर' के बजाय 'form_params' का उपयोग करें।
जसोनफ्लैंक

5
POST अनुरोध भेजने के लिए एक सरणी के रूप में "निकाय" अनुरोध विकल्प में पास किया गया है। कृपया एप्लिकेशन / x-www-form-urlencoded अनुरोध या "मल्टीपार्ट" अनुरोध विकल्प भेजने के लिए "form_params" अनुरोध विकल्प का उपयोग करें।
जेरेमी क्विंटन

@ जेरेमीक्विंटन, तो आपने जो भी चुना है, उसे ... कृपया उत्तर दें
मधुर

@ माधुर नीचे दिए गए उत्तर को देखें
जेरेमी क्विंटन

कृपया प्रतिक्रिया संपादित करें और इसे जोड़ें "यह विधि अब 6.0 में पदावनत हो गई है। इसके बजाय 'बॉडी' का उपयोग 'form_params' के लिए करें
a828h

184

चूंकि मार्को का उत्तर पदावनत है , इसलिए आपको निम्नलिखित सिंटैक्स का उपयोग करना चाहिए (जसोनफ्लैंक की टिप्पणी के अनुसार):

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
    'form_params' => [
        'email' => 'test@gmail.com',
        'name' => 'Test user',
        'password' => 'testpassword',
    ]
]);

POST फ़ाइलों के साथ अनुरोध करें

$response = $client->request('POST', 'http://www.example.com/files/post', [
    'multipart' => [
        [
            'name'     => 'file_name',
            'contents' => fopen('/path/to/file', 'r')
        ],
        [
            'name'     => 'csv_header',
            'contents' => 'First Name, Last Name, Username',
            'filename' => 'csv_header.csv'
        ]
    ]
]);

अन्य क्रियाएं परम के साथ उपयोग करती हैं

// PUT
$client->put('http://www.example.com/user/4', [
    'body' => [
        'email' => 'test@gmail.com',
        'name' => 'Test user',
        'password' => 'testpassword',
    ],
    'timeout' => 5
]);

// DELETE
$client->delete('http://www.example.com/user');

Async पोस्ट डेटा

लंबे सर्वर संचालन के लिए उपयोगी।

$client = new \GuzzleHttp\Client();
$promise = $client->requestAsync('POST', 'http://www.example.com/user/create', [
    'form_params' => [
        'email' => 'test@gmail.com',
        'name' => 'Test user',
        'password' => 'testpassword',
    ]
]);
$promise->then(
    function (ResponseInterface $res) {
        echo $res->getStatusCode() . "\n";
    },
    function (RequestException $e) {
        echo $e->getMessage() . "\n";
        echo $e->getRequest()->getMethod();
    }
);

हेडर सेट करें

इसके अनुसार प्रलेखन के , आप शीर्ष लेख सेट कर सकते हैं:

// Set various headers on a request
$client->request('GET', '/get', [
    'headers' => [
        'User-Agent' => 'testing/1.0',
        'Accept'     => 'application/json',
        'X-Foo'      => ['Bar', 'Baz']
    ]
]);

डिबगिंग के लिए अधिक जानकारी

यदि आप अधिक विवरण जानकारी चाहते हैं, तो आप उपयोग कर सकते हैं debug इस तरह के विकल्प का :

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'http://www.example.com/user/create', [
    'form_params' => [
        'email' => 'test@gmail.com',
        'name' => 'Test user',
        'password' => 'testpassword',
    ],
    // If you want more informations during request
    'debug' => true
]);

दस्तावेज़ीकरण नई संभावनाओं के बारे में अधिक खोज है।


मैं पोस्ट अनुरोध में क्वेरी स्ट्रिंग कैसे भेज सकता हूं?
रहेल

आप क्या देख रहे हो ? यदि क्वेरी स्ट्रिंग URL का एक हिस्सा है, तो आपको इसे URL में सीधे जोड़ना होगा जैसे example.com/user/create?mode=dev "
शमूएल डौज़न

मैं url एन्कोडेड डेटा के साथ पेपाल पर पोस्ट अनुरोध भेजने की कोशिश कर रहा हूं। मुझे लगता है कि इसकी ['बॉडी'] की।
रहेल ३०'१६ को

पोस्ट अनुरोधों में क्वेरी स्ट्रिंग भेजने के लिए, मैंने परम के
marcostvz

1
@ clockw0rk मैंने आपके लिए एक HTTP हेडर भाग जोड़ा है। आपके पास डॉक का लिंक है
सैमुअल Dauzon

37

नोट: गज़ल V6.0 + में, निम्न त्रुटि प्राप्त करने का एक अन्य स्रोत सरणी के रूप में JSON का गलत उपयोग हो सकता है:

POST अनुरोध भेजने के लिए एक सरणी के रूप में "निकाय" अनुरोध विकल्प में पास किया गया है। कृपया एप्लिकेशन / x-www-form-urlencoded अनुरोध भेजने के लिए "form_params" अनुरोध विकल्प का उपयोग करें, या मल्टीपार्ट / फॉर्म-डेटा अनुरोध भेजने के लिए "मल्टीपार्ट" अनुरोध विकल्प का उपयोग करें।

गलत :

$response = $client->post('http://example.com/api', [
    'body' => [
        'name' => 'Example name',
    ]
])

सही करें :

$response = $client->post('http://example.com/api', [
    'json' => [
        'name' => 'Example name',
    ]
])

सही करें :

$response = $client->post('http://example.com/api', [
    'headers' => ['Content-Type' => 'application/json'],
    'body' => json_encode([
        'name' => 'Example name',
    ])
])

1
$client = new \GuzzleHttp\Client();
$request = $client->post('http://demo.website.com/api', [
    'body' => json_encode($dataArray)
]);
$response = $request->getBody();

जोड़ना

openssl.cafileमें php.iniफ़ाइल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.