পিএইচপি গুজলহট্ট কীভাবে প্যারাম দিয়ে একটি পোস্টের অনুরোধ করবেন?


107

গুজলএইচটিপি (সংস্করণ 5.0) দিয়ে কীভাবে একটি পোস্টের অনুরোধ করবেন।

আমি নিম্নলিখিতটি করার চেষ্টা করছি:

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

তবে আমি ত্রুটিটি পাচ্ছি:

পিএইচপি মারাত্মক ত্রুটি: আনকেনড ব্যতিক্রম 'অবৈধআর্গুমেন্ট এক্সেক্সশন' বার্তাটির সাথে 'কোনও পদ্ধতি ইমেল কনফিগার কীটি পরিচালনা করতে পারে না'

উত্তর:


97

এটা চেষ্টা কর

$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'
        )
    )
);

92
এই পদ্ধতিটি এখন 6.0 এ অবমূল্যায়ন করা হয়েছে। পরিবর্তে 'দেহ' ব্যবহার করুন 'ফর্ম_প্যারামস'।
জেসনলফ্যাঙ্ক

4
POST অনুরোধ প্রেরণের জন্য অ্যারে হিসাবে "বডি" রিকোয়েস্ট অপশনে পাস করা অবহেলা করা হয়েছে। অ্যাপ্লিকেশন / x-www-form-urlencoded অনুরোধ প্রেরণ করার জন্য দয়া করে "form_params" অনুরোধ বিকল্পটি ব্যবহার করুন বা একটি মাল্টিপার্ট / ফর্ম-ডেটা অনুরোধ প্রেরণের জন্য "মাল্টিপার্ট" অনুরোধ বিকল্পটি ব্যবহার করুন।
জেরেমি কুইন্টন

@ জেরেমি কিউটন, তাই আপনি যেটির আন্তঃ নির্বাচন করেছেন ... দয়া করে উত্তর দিন
মধুর

@ মাধুর নীচের উত্তরটি দেখুন
জেরেমি কুইন্টন

দয়া করে প্রতিক্রিয়াটি সম্পাদনা করুন এবং এটিকে যুক্ত করুন "এই পদ্ধতিটি এখন in.০-এ অবমুক্ত করা হয়েছে। এতে 'বডি' ব্যবহারের পরিবর্তে 'ফর্ম_প্রেমস'" এতে ব্যবহার করুন
a828

189

যেহেতু মার্কোর উত্তর অবচিত হ'ল , আপনাকে অবশ্যই নিম্নলিখিত সিনট্যাক্সটি ব্যবহার করতে হবে (জেসনফ্ল্যাঙ্কের মন্তব্য অনুসারে):

$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',
    ]
]);

পোস্ট ফাইলের সাথে অনুরোধ করুন

$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'
        ]
    ]
]);

প্যারামগুলির সাথে REST ক্রিয়াপদের ব্যবহার

// 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');

অ্যাসিঙ্ক পোস্টের ডেটা

দীর্ঘ সার্ভার ক্রিয়াকলাপের জন্য দরকারী।

$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 "
স্যামুয়েল Dauzon

আমি ইউআরএল এনকোডড ডেটা সহ পেপালের জন্য পোস্ট অনুরোধ প্রেরণের চেষ্টা করছি। আমি মনে করি এটির ['বডি'] কী।
রাহিল

পোস্টের অনুরোধগুলিতে ক্যোরিয়
marcostvz

4
@ ক্লাবডब्लিউআরকি আমি আপনার জন্য একটি HTTP শিরোনাম অংশ যুক্ত করেছি। আপনার দস্তাবেজের লিঙ্কটি রয়েছে
স্যামুয়েল ড্যাজন

38

গুজল ভি 6.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ফাইল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.