php异步提交数据 curl,PHP中的异步curl请求

小编典典

因此,您要做的是异步执行cUrl请求。

因此,您将需要一个用于php的异步/并行处理库。

p线程

php的著名线程库之一是 pthreads

您首先需要获取dll / so文件并将其保存在php/extdir中,然后在中启用该扩展名php.ini。

之后,此代码将完成您的工作:

class Request1 extends Thread {

$username = 'xxxxx';

$api_onfleet = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$url_onfleet = "https://onfleet.com/api/v2/tasks";

public function run() {

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

$request = $this->url.'api/mail.send.json';

// Generate curl request

$session = curl_init($request);

// Tell curl to use HTTP POST

curl_setopt ($session, CURLOPT_POST, true);

// Tell curl that this is the body of the POST

curl_setopt ($session, CURLOPT_POSTFIELDS, $params);

// Tell curl not to return headers, but do return the response

curl_setopt($session, CURLOPT_HEADER, false);

curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

// obtain response

$response = curl_exec($session);

curl_close($session);

}

}

class Request2 extends Thread {

$username = 'xxxxx';

$api_onfleet = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$url_onfleet = "https://onfleet.com/api/v2/tasks";

public function run() {

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url_onfleet);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_USERPWD, $this->api_onfleet);

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

curl_setopt($ch, CURLOPT_ENCODING, "");

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, '{"destination":{"address":{"unparsed":"'.$pickup_address.'"},"notes":"'.$comments.'"},"recipients":[{"name":"'.$name.'","phone":"+61'.$phone.'","notes":"Number of riders: '.$riders.'"}],"completeBefore":'.$timestamp.',"pickupTask":"yes","autoAssign":{"mode":"distance"}}');

$result_pickup = curl_exec($ch);

curl_close($ch);

// Post the Dropoff task to Onfleet

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $this->url_onfleet);

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_USERPWD, $this->api_onfleet);

curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

curl_setopt($curl, CURLOPT_ENCODING, "");

curl_setopt($curl, CURLOPT_POST, true);

curl_setopt($curl, CURLOPT_POSTFIELDS, '{"destination":{"address":{"unparsed":"'.$dropoff_address.'"},"notes":"'.$comments.'"},"recipients":[{"name":"'.$name.'","phone":"+61'.$phone.'","notes":"Number of riders: '.$riders.'"}],"autoAssign":{"mode":"distance"}}');

$result_dropoff = curl_exec($curl);

curl_close($curl);

}

}

$req1 = new Request1();

$req1->start();

$req2 = new Request2();

$req2->start();

因此,基本上,您需要创建一个扩展Thread该类的类,并且要异步运行(而是并行运行)的所有内容都将放入run()该类的函数中。

当您想启动线程时,只需在变量中实例化类,然后调用对象的start方法,就像,$threadsObject->start()并且其中的所有内容都run()将在另一个线程上执行。

参考:

而已。

异步cURL

另一种方法是使用内置的异步cURL函数。

因此,使用时curl_multi_*,您的代码将类似于:

$username = 'xxxxx';

$api_onfleet = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$url_onfleet = "https://onfleet.com/api/v2/tasks";

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

$request = $url.'api/mail.send.json';

// Generate curl request

$session = curl_init($request);

// Tell curl to use HTTP POST

curl_setopt ($session, CURLOPT_POST, true);

// Tell curl that this is the body of the POST

curl_setopt ($session, CURLOPT_POSTFIELDS, $params);

// Tell curl not to return headers, but do return the response

curl_setopt($session, CURLOPT_HEADER, false);

curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

// Post the Pickup task to Onfleet

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url_onfleet);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_USERPWD, $api_onfleet);

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

curl_setopt($ch, CURLOPT_ENCODING, "");

curl_setopt($ch, CURLOPT_POST, true);

curl_setopt($ch, CURLOPT_POSTFIELDS, '{"destination":{"address":{"unparsed":"'.$pickup_address.'"},"notes":"'.$comments.'"},"recipients":[{"name":"'.$name.'","phone":"+61'.$phone.'","notes":"Number of riders: '.$riders.'"}],"completeBefore":'.$timestamp.',"pickupTask":"yes","autoAssign":{"mode":"distance"}}');

$mh = curl_multi_init();

curl_multi_add_handle($mh,$session);

curl_multi_add_handle($mh,$ch);

$active = null;

//execute the handles

do {

$mrc = curl_multi_exec($mh, $active);

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {

if (curl_multi_select($mh) != -1) {

do {

$mrc = curl_multi_exec($mh, $active);

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

}

}

//close the handles

curl_multi_remove_handle($mh, $ch1);

curl_multi_remove_handle($mh, $ch2);

curl_multi_close($mh);

建议阅读:

2020-05-26

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值