VeeBee
VeeBee

Reputation: 847

PHP cURL sending to port 8080

today I am trying to make a curl call to somesite which is listening to port 8080. However, calls like this get sent to port 80 and not 8080 instead:

$ch = curl_init();
curl_setopt($ch, CURLOPT_PORT, 8080);
curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080');
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$target_response = curl_exec($ch);
curl_close($ch);

am i missing something here?

Upvotes: 14

Views: 45054

Answers (8)

vikashraj144
vikashraj144

Reputation: 71

Use PHP cURL to make a request to port 8080 on a server

$ch = curl_init();
curl_setopt($ch, CURLOPT_PORT, 8080);
curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080');
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$target_response = curl_exec($ch);
curl_close($ch);
       
curl_setopt($ch, CURLOPT_URL, 'http://somesite.tld:8080');

Upvotes: 0

Ohadsh
Ohadsh

Reputation: 46

Simple CURL GET request: (Also added json/headers if required, to make your life easier in need)

<?php
$chTest = curl_init();
curl_setopt($chTest, CURLOPT_URL, "http://example.com:8080/?query=Hello+World");
curl_setopt($chTest, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8', 'Accept: application/json'));
curl_setopt($chTest, CURLOPT_HEADER, true);
curl_setopt($chTest, CURLOPT_RETURNTRANSFER, true);

$curl_res_test = curl_exec($chTest);
$json_res_test = explode("\r\n", $curl_res_test);

$codeTest = curl_getinfo($chTest, CURLINFO_HTTP_CODE);
curl_close($chTest);
?>

Example POST request:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://example.com:8080');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8', 'Accept: application/json'));
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"Hello" : "World", "Foo": "World"}');
// Set timeout to close connection. Just for not waiting long.
curl_setopt($ch, CURLOPT_TIMEOUT, 10);

$curl_res = curl_exec($ch);
?>

Charset is not a required HTTP header and so are the others, the important one is Content-Type.

For the examples I used JSON MIME type, You may use whatever you want, take a look at the link: http://en.wikipedia.org/wiki/Internet_media_type

Make sure that the php_curl.dll extension is enabled on your php, and also that the ports are open on the target serve.

Hope this helps.

Upvotes: 1

Chilion
Chilion

Reputation: 4490

Maby you can use --local-port [-num]

Set a preferred number or range of local port numbers to use for the connection(s). Note that port numbers by nature are a scarce resource that will be busy at times so setting this range to something too narrow might cause unnecessary connection setup failures. (Added in 7.15.2)

Source: http://curl.haxx.se/docs/manpage.html#--ftp-pasv

Upvotes: 0

Sunil Kumar Sain
Sunil Kumar Sain

Reputation: 105

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "your-domain-name");
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); `
?>

Upvotes: -1

SilentSteel
SilentSteel

Reputation: 2434

Just a note, I've had this issue before because the web host I was using was blocking outbound ports aside from the standard 80 and 443 (HTTPS). So you might want to ask them or do general tests. In fact, some hosts often even block outbound on port 80 for security.

Upvotes: 4

Daniel Convissor
Daniel Convissor

Reputation: 323

Your web server is misconfigured. The code you provided works for me.

Also, your code can be simpler. Just put the URI into the init call and drop the CURLOPT_PORT and CURLOPT_URL lines:

$ch = curl_init('http://somesite.tld:8080');

Upvotes: 0

khalrd
khalrd

Reputation: 60

try this option for curl

curl_setopt($ch, CURLOPT_PROXY,"localhost:8080");

or use this

curl_setopt($ch, CURLOPT_PROXY,"yourservername:8080");

Upvotes: -1

David
David

Reputation: 974

First check that you're able to connect using something other than PHP's horrible Curl syntax:

else look at using (for linux users)

  • curl somesite:8080
  • wget -qO- somesite:8080

Once you've established you can connect, then you can go about the horrible business of using PHP Curl. There are wrappers, but they're flaky that I've found.

Both Curl, Wget or similar can be very easily configured to use GET and POST methods. It's not advisible, but for more than one complicated operation using Curl I've simply given up trying to configure PHP's library correctly and simply dropped to the command line.

THERE ARE SECURITY IMPLICATIONS. You need to take great care to ensure that anything you give it, particularly if it's from a form or an external source, is appropriately escaped.

<? 

//Strip out any possible non-alpha-numeric character for security

$stringToSend = preg_replace('[^a-zA-Z]', '', $stringToSend);

$return = shell_exec("curl -X POST -d $stringToSend http://example.com/path/to/resource");

Upvotes: 0

Related Questions