I am new at API´s, Curl and Json. I need to link my appilcation with the an API.
The API I want to connect with has a CURL example which is this:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -X GET https://www.api.com -u 'user:token'
I have made some research and I make a request like this:
$url = "https://www.api.com";
$headers = array(
-H "Accept: application/json",
-H "Content-type: application/json"
-u 'Authorization: Basic '. base64_encode("user:token") // <---
);
//initializing curl object
$curl = curl_init();
//adding fields to the curl object to enter the site
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
//executing the curl call and getting data back
$json = curl_exec($curl);
curl_close($curl); // close the connection
//echo $json;
return $json;
I get the Json request but I still don´t understand the example the API gives. I even don´t know if I am setting well the Curl.
can someone explain to me how can I interpret the Curl example if I doing it well ?
This is not valid PHP syntax:
$headers = array(
-H "Accept: application/json",
-H "Content-type: application/json"
-u 'Authorization: Basic '. base64_encode("user:token") // <---
);
You should use this instead:
$headers = array(
'Accept: application/json',
'Content-type: application/json',
);
And for the auth, use this:
curl_setopt($curl, CURLOPT_USERPWD, $username . ':' . $password);
Related
I have to make a curl request in php with these parameters, can you help me with an example, since I can't find anything similar
the link curl
curl -X GET "https://example.com/nms/api/v2.1/devices?withInterfaces=true&authorized=false&type=uisps&role=switch" -H "accept: application/json" -H "x-auth-token: wsedr4455-3345-es45-2345-4edeesssd"
You should transform it into PHP curl syntax. It should work like this:
$ch = curl_init('https://example.com/nms/api/v2.1/devices?withInterfaces=true&authorized=false&type=uisps&role=switch');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'accept: application/json',
'x-auth-token: wsedr4455-3345-es45-2345-4edeesssd'
));
$result = curl_exec($ch);
curl_close($ch);
The JSON incoming is in $result.
I'm using cURL cmd for trying a API.
I will need help to translate this into PHP :
curl -X POST "https://open.faceit.com/chat/v1/rooms/hub-4d2be024-1573-4312-9c56-425003027f08-general/messages" -H "accept: application/json" -H "Content-Type: application/json" -H "Authorization: Bearer <ACCES_TOKEN>" -d "{ \"body\": \"test\"}"
Thank you for your future help !
Something like this should do it, there are a lot of post on using cUrl with PHP
How to POST JSON Data With PHP cURL? , Set bearer token with cURL
<?php
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,'https://open.faceit.com/chat/v1/rooms/hub-4d2be024-1573-4312-9c56-425003027f08-general/messages');
curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2);
$authorization = "Authorization: Bearer ".$token;
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, array('Content-Type: application/json' , $authorization ));
# Return response instead of printing.
curl_setopt( $curl_handle, CURLOPT_RETURNTRANSFER, true );
$post = json_encode(["body"=>"test"]);
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $post);
$buffer = curl_exec($curl_handle);
curl_close($curl_handle);
if (empty($buffer)){
print "Nothing returned from url.<p>";
}
else{
print $buffer;
}
?>
i want to use api of a website for send notification to my app
and the website help is not good :/
website said you should write in header of request tokan code and some setting
how can i post json data to this website with php ?
with these header
"Authorization: Token 7fb1………………………………29b464c "
"Content-Type: application/json"
"Accept: application/json"
and the url is from help text of website
curl -X POST "https://panel.pushe.co/api/v1/notifications/"
please help me#_#
Use something like this:
$ curl -X POST -i -H "Content-Type: application/json" -H "Authorization: TOKEN <YOUR_TOKEN>" https://panel.pushe.co/api/v1/notifications/
php example from here
$data = array("name" => "Hagrid", "age" => "36");
$data_string = json_encode($data);
$ch = curl_init('http://api.local/rest/users');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
I have to make a call to an API and I have the terminal command that works but I can't seem to make it work with php (I get 403 forbidden error). This is the call that works:
curl -X GET -H "mail: mail#api.com" -H "password: XXX" "http://api.com/rest/v1"
This is what I have in PHP so far:
$url = "http://api.com/rest/v1";
$headers = array(
"Content-type: application/json",
"Accept: application/json",
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
$auth = array('mail: mail#api.com', 'password: XXX');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($auth));
$data = curl_exec($ch);
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
} else {
// Show me the result
var_dump($data);
curl_close($ch);
}
The var_dump shows bool(true) but I also get the 403 error message. I also tried adding the email/password in the headers but didn't work. Like this (and removing the CURLOPT_POSTFIELDS line):
$headers = array(
"Content-type: application/json",
"Accept: application/json",
'mail: mail#api.com',
'password: XXX'
);
-H is a header for the curl command line, so why are you setting them as the postfields?
Seems like it should be:
$headers = array('mail: mail#api.com', 'password: XXX');
This should be the same as your CLI command above. If this doesn't work, check the output of curl_exec() to see what the server is responding.
Here is my curl commaad line .
curl -u 'username:password' -X GET -H 'Accept: application/json' -H 'Content-Type: application/xml' -d '<request><layout>1</layout><filtermode>category</filtermode><filtervalue>115399046</filtervalue><limit>1</limit><start></start><sortfield></sortfield><sortdir></sortdir></request>' https://example.com/contacts
I use curl command line. It works for me. Now, I need do it in PHP.
The hard part is: The server accept GET request, but need a xml string in request body. I have tried to change GET to POST, the server did NOT return the correct message.
<?php
$ch = curl_init();
$credentials = "user:pass";
$data = 'xml string';
$page = "/contacts";
$headers = array( "GET ".$page." HTTP/1.0", "Content-type: application/xml", "Accept: application/json", "Authorization: Basic " . base64_encode($credentials) );
curl_setopt($ch, CURLOPT_URL, 'example.com/contacts');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$ret = curl_exec($ch);
?>
You can't put the GET line in $header, that causes an invalid header to be sent. The PHP equivalent of -X GET is:
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");