Я пытаюсь написать базовый код curl на PHP.Я думаю, что я делаю правильно (насколько я прочитал) -
$url = '0.0.0.0:8080/data.php';
$data = array('username'=>'name','email'=>'abcd@gmail.com');
$payload = json_encode(array($data));
print_r($payload);
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_PORT , 8080);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
//curl_setopt($ch, CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
curl_setopt($ch,CURLOPT_POSTFIELDS,$payload);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type:application/json'));
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$result = curl_exec($ch);
print_r(curl_getinfo($ch));
curl_close($ch);
Вот как выглядит data.php:
$_POST=json_decode(file_get_contents("php://input"),1);
print_r($_POST);
if(isset($_POST['username'],$_POST['email'])){
$username=mysqli_real_escape_string($db,$_POST['username']);
$email=mysqli_real_escape_string($db,$_POST['email']);
$query = "INSERT INTO tbl_user (username, email)
VALUES('$username', '$email')";
mysqli_query($db, $query);
}
Я не могу понять, почемуЭто не работает.Код застревает на curl_exec()
.Я проведу санитарную обработку и буду использовать подготовленные операторы, как только получу эту работу.
Это журнал:
* Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 8080 (#0)
> POST /data.php HTTP/1.1
Host: 0.0.0.0:8080
Accept: */*
Content-Type:application/json
Content-Length: 46
* upload completely sent off: 46 out of 46 bytes
И он застрянет там.Что я здесь не так делаю?Разве curl не работает на локальных хостах?
РЕДАКТИРОВАТЬ: Это серьезное изменение, но я не думаю, что было бы правильным слишком изменить исходный вопрос.Я уменьшил все это до -
<?php
// create a new cURL resource
$ch = curl_init();
// set URL and other appropriate options
//curl_setopt ($ch, CURLOPT_PORT , 8080);
curl_setopt($ch, CURLOPT_URL, "http://localhost:8080/data.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, true);
//curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
// grab URL and pass it to the browser
curl_exec($ch);
if ( curl_error ( $ch ) ) { echo curl_error ( $ch ); }
// close cURL resource, and free up system resources
curl_close($ch);
?>
, что также застряло.Однако то же самое работает с www.example.com
.Поэтому я думаю, что проблема заключается в получении моего URL.
это журнал:
* Rebuilt URL to: http://localhost:8080/
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET / HTTP/1.1
Host: localhost:8080
Accept: */*
data.php
имеет только echo "Hello";
прямо сейчас, чтобы проверить его
Я могу удалить предыдущие части вопроса, если они не нужны.