简体   繁体   中英

cURL not making requests in sequence

I have a custom function that uses cURL to make a request and then handle the response. I use it in a loop and the function itself works fine. But, when used inside of a loop, the function that is supposed to be executed first often doesn't. Seems like the sequence in which the posts are supposed to occur are totally neglected.

function InitializeCurl($url, $post, $post_data, $token, $form, $request) {
    if($post) { 
        if($form) {
            $default = array('Content-Type: multipart/form-data;'); 
        } else {
            $default = array('Content-Type: application/x-www-form-urlencoded; charset=utf-8');
        }
    } else {
        $default = array('Content-Type: application/json; charset=utf-8');
    }

    // Add the authorization in the header if needed
    if($token) {
        $push = 'Authorization: Bearer '.$token;
        array_push($default, $push);
    }

    $headers = array_merge($GLOBALS['basics'], $default);   

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://api.test.com/'.$url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_HEADER, 0);

    if($request) {
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request);
    }

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    if($post) {
        if($form === false) {
            $post_data = http_build_query($post_data);
        }

        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    }

    $response = curl_exec($ch);
    return $response;
}

// Define the token
$token = "sample_token";

$msg = array('msg_1', 'msg_2', 'msg_3', 'msg_4', 'msg_5', 'msg_6', 'msg_7', 'msg_8', 'msg_9', 'msg_10');

for($i=0;$i<count($msg);$i++) {
     $post_data = array("content_type" => "text",
                        "body" => $msg[$i]);
     $info = InitializeCurl("send_message/", true, $post_data, $token, false, false);
     $decode = @json_decode($info, true); 
}

The loop should make it so that each message is posted after one another in order. But, it's totally not. Would adding CURLOPT_TIMEOUT fix this?

Seems you are missing some code, but anyway, you would probably be better off using this CURL class, or rather classes:

http://semlabs.co.uk/journal/multi-threaded-stack-class-for-php

See examples. You will be returned a result with all the URLs. You can loop through to get details of the URL etc. like this:

$urls = array(
    1 => 'http://seobook.com/',
    2 => 'http://semlabs.co.uk/',
    64 => 'http://yahoo.com/',
    3 => 'http://usereffect.com/',
    4 => 'http://seobythesea.com/',
    5 => 'http://darkseoprogramming.com/',
    6 => 'http://visitwales.co.uk/',
    77 => 'http://saints-alive.co.uk/',
    7 => 'http://iluvsa.blogspot.com/',
    8 => 'http://sitelogic.co.uk/',
    9 => 'http://tidybag.co.uk/',
    10 => 'http://felaproject.net/',
    99 => 'http://billhicks.com/'
);
$opts = array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true
);
$hs = new CURLRequest();
$res = $hs->getThreaded( $urls, $opts, 5 );
foreach( $res as $r )
{
    print_r( $r['info'] ); # prints out verbose info and data of URL etc.
    print_r( $r['content'] ); # prints out the HTML response
}

But the result will be returned in sequence, so you can also identify the response by index.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM