Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make a PATCH request in PHP using cURL?

Tags:

php

curl

patch

I have to make a PATCH request using PhP cURL. I couldn't find any documentation, so I tried the following but it isn't working.

$data = "{'field_name': 'field_value'}"; $url = "http://webservice.url"; $headers = array('X-HTTP-Method-Override: PATCH'); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curl); curl_close($curl); 

Any idea why this isn't working? How can I fix it?

Edit: I am connecting to a RESTful web service. It returns HTTP/1.1 200 for successful requests. Unsuccessful requests return HTTP/1.1 403. I keep getting 403.

I tried changing $data to:

$data = "data={'field_name': 'field_value'}"; 

It didn't change the outcome.

Edit2: The final working code.

$data = "{'field_name': 'field_value'}"; $url = "http://webservice.url"; $headers = array('Content-Type: application/json'); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH'); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($curl); curl_close($curl); 
like image 272
Sandeep M Avatar asked Jan 22 '13 04:01

Sandeep M


People also ask

Can I use cURL in PHP?

cURL is a PHP extension that allows you to use the URL syntax to receive and submit data. cURL makes it simple to connect between various websites and domains.

What is Patch method in PHP?

The PATCH request method is used to modify a resource on the server partially. To send a PATCH request to the server, you need to use the HTTP PATCH method and include the request data in the body of the HTTP message. The Content-Type request header must indicate the data type in the body.


2 Answers

curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH'); should do it.

like image 82
quickshiftin Avatar answered Sep 21 '22 12:09

quickshiftin


JSON PATCH would be better for data format since this format is designed for HTTP PATCH request. See https://www.rfc-editor.org/rfc/rfc6902 for the spec. The tutorial of Rails 4 show the example(http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#http-patch).

// https://www.rfc-editor.org/rfc/rfc6902#section-4 $data = '{ "op": "add", "path": "/a/b/c", "value": "foo" }'; $headers = array('Content-Type: application/json-patch+json'); 
like image 41
masakielastic Avatar answered Sep 21 '22 12:09

masakielastic