Send POST request using CURL command and retrieve using PHP - php

I'm trying to HTTP POST using the following command on linux
curl -X POST --data-ascii "a=hello world" http://www.mysite.com/controller/function_name
Its not working, my server is not accepting the POST at all.
My PHP code is:
<?php
print_r($_POST);
?>
whereas if I try this on my local machine it works.
For ex.
curl -X POST --data-ascii "a=hello world" http://192.168.1.10/controller/function_name
Also, the server is shared host, is it a problem?
What am I doing wrong?

Related

How to interpret CURL headers sent by user

I am creating an API using Laravel and Apache as the backend. My predicament is this, when I type a curl command in my terminal like,
curl -H "API KEY: NIKAPIKEY" --data "param1=value1&param2=value2" http://localhost:8888/awesome-calendar/public/config
How do I read the header API KEY in my php backend? Like I can read the POST parameters as $_REQUEST.
Answered by #nogad
The function apache_request_headers acts like the var_dump for all HTTP headers
http://php.net/manual/en/function.apache-request-headers.php

Unable to POST file through curl using advanced rest client

Sending file to a php script works fine with curl from terminal but not through advanced rest client or postman.
Curl request-
curl -v --form filename=#/cus-check.json --form name=Upload http://127.0.0.1/cus.php
When sending the same request through ARC or Postman, the $_POST variable in php script returns an empty array.
Images

PUT a file in Tika but without curl

So far, I have seen numerous examples on how to PUT a file in a Tika server using curl. For example from the Tika wikipage documentation we can conclude that if your file is in location
"file:///var/www/html/files/a.pdf"
in your machine and the Tika server runs on
http://localhost:9998
then using curl you can do a
curl -s "file:///var/www/html/files/a.pdf" | curl -X PUT -T - http://localhost:9998/meta
to get the metadata.
However, I haven't seen an example where the complete URI is given that makes the above JAXRS tika server providing the same result as the curl command above but showing the result in my browser this time and not on the terminal.
So, say I am visiting on my browser the tika server URI:
http://localhost:9998
what do I have to append to this URI in order to get the metadata like the curl command in my browser?
Thank you forum
The answer is in the curl command in your question:
curl -s "file:///var/www/html/files/a.pdf" | curl -X PUT -T - http://localhost:9998/meta
The URL you need to put to is at the end - http://localhost:9998/meta
You can also find all the endpoints in a Tika server from the listing linked from the welcome page when you go to the server with your web browser, and from Tika Wika Page for the Server

POST request from Ruby to PHP. Unable to fetch data from the PHP page

I am working on this Ruby console application which should send a POST request to a PHP file and then print out the outcome in the console. The issue is that the outcome from the PHP file is not getting printed out in the Ruby console app.
This is my Ruby code:
require 'net/http'
data = {'command' => 'Test'}
postData = Net::HTTP.post_form(URI.parse('http://localhost/mysite/bin/app/handler.php'), data)
puts postData.body
And this is my PHP file:
<?php
echo $_POST['command'] . ' test';
?>
But this returns nothing. What am I not seeing and what is wrong with this code? I tried pointing to a bad URI and it returned me a 404 HTML page right in the console, but with my correct URI it's not working.
Something is wrong with your PHP server. Perhaps it is not running on port 80 (the HTTP port)? Your code works great when ran using PHP's built-in web server. I.e., assuming the PHP script is server.php and the following ruby code is placed in client.rb (note the :8000 part in the URI):
# client.rb
require 'net/http'
data = {'command' => 'Test'}
postData = Net::HTTP.post_form(URI.parse('http://localhost:8000/server.php'), data)
puts postData.body
Running PHP built-in server on port 8000:
cd ~/test
php -S localhost:8000
and running the ruby client from the command line:
ruby client.rb
Produces the expected "Test test" result.

following url: curl couldn't resolve host 'GET'

I have a page (realized with a php framework) that add records in a MySQL db in this way:
www.mysite.ext/controller/addRecord.php?id=number
that add a row in a table with the number id passed via post and other informations such as timestamp, etc.
So, I movedo my eintire web applicazione to another domain and all HTTP requests works fine from old to new domain.
Only remaining issue is the curl: I wrote a bash script (under linux) that run curl of this link. Now, obviously it does not works because curl returns an alert message in which I read the page was moved.
Ok, I edited the curl sintax in this way
#! /bin/sh
link="www.myoldsite.ext/controlloer/addRecord.php?id=number"
curl --request -L GET $link
I add -L to follow url in new location but curl returns the error I wrote in this topic title.
It would be easier if I could directly modify the link adding the new domain but I do not have physical access to all devices.
GET is the default request type for curl. And that's not the way to set it.
curl -X GET ...
That is the way to set GET as the method keyword that curl uses.
It should be noted that curl selects which methods to use on its own depending on what action to ask for. -d will do POST, -I will do HEAD and so on. If you use the --request / -X option you can change the method keyword curl selects, but you will not modify curl's behavior. This means that if you for example use -d "data" to do a POST, you can modify the method to a PROPFIND with -X and curl will still think it sends a POST. You can change the normal GET to a POST method by simply adding -X POST in a command line like:
curl -X POST http://example.org/
... but curl will still think and act as if it sent a GET so it won't send any request body etc.
More here: http://curl.haxx.se/docs/httpscripting.html#More_on_changed_methods
Again, that's not necessary. Are you sure the link is correct?

Categories