cURL / Mailing Lists / curl-and-php / Single Mail

curl-and-php

Re: post then get help

From: ryan pal <ryanpal_at_mail.com>
Date: Mon, 7 Jul 2008 21:05:32 -0500

In order to first post I must tell curl to use POST, which I have done
with:

curl_setopt(

$ch, CURLOPT_POSTFIELDS, $postfields);

Since I need to do a GET after this, don't I have to do a CURLPT_HTTPGET
after or else it will still try to post?

I believe that's the issue I'm having from the beginning. How to do a
POST then a get. I'm under the impression that I have to write code to
switch between the two. I'm also a little confused of I should code what
you describe.

Here is my main function along with the one you describe. How would I
modify it to do GET?

list($header, $data) = explode("\n\n", $data, 2);

$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

//echo "HTTP CODE: $http_code<br>";

if ($http_code == 301 || $http_code == 302)

{

curl_setopt(

$ch, CURLOPT_POST, 0); //turn off POST method

curl_setopt(

$ch, CURLOPT_HTTPGET, 1); //set GET method

//curl_setopt($ch, CURLOPT_DEBUGFUNCTION,1);

curl_setopt(

$ch, CURLOPT_POSTFIELDS, NULL);

echo "code is 301 or 302";

$matches = array();

preg_match(

'/Location:(.*?)\n/', $header, $matches);

$url = @parse_url(trim(array_pop($matches)));

}

function

curl_navigate($url,$postfields){

$ch = curl_init(); //initialize curl handle

curl_setopt(

$ch, CURLOPT_URL,$url); //set url to post to

curl_setopt(

$ch, CURLOPT_VERBOSE, 1);

curl_setopt(

$ch, CURLOPT_FAILONERROR, 1);

curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp");

curl_setopt(

$ch, CURLOPT_RETURNTRANSFER, 1); //return into variable

curl_setopt(

$ch, CURLOPT_TIMEOUT, 24); //timeout after 25s

curl_setopt(

$ch, CURLOPT_POST, 1); //set POST method

curl_setopt(

$ch, CURLOPT_POSTFIELDS, $postfields); //add post fields

curl_setopt(

$ch, CURLOPT_AUTOREFERER, 1);

//curl_setopt($ch, CURLINFO_HEADER_OUT, true);

curl_redir_exec(

$ch);

$result = curl_exec($ch); //run the whole process

return $result;

curl_close(

$ch);

}

  ----- Original Message -----
  From: "Stephen Pynenburg"
  To: "curl with PHP"
  Subject: Re: post then get help
  Date: Mon, 7 Jul 2008 21:43:07 -0400

  Hey,
  After the first POST, you only need that little snippet from the
  function to get the new Location header.
  Once you've got the new URL from your special POST request, you can
  actually just use the full function for the rest of your requests.
  About using GET, unless you explicitly tell cURL to use POST or PUT
  or something, it defaults to a GET request, so you shouldn't have to
  worry.

  -Stephen

  2008/7/7 ryan pal <ryanpal_at_mail.com>:

    stephen, i see you displayed only a little bit of the redirect
    function. are you suggesting i omit the rest? also, how do you
    do a get request? use the CURLOPT_HTTPGET? oh and one more
    thing. should this be a seperate function since you mention i
    should do the POST as normal? thanks,ryan

      ----- Original Message -----
      From: "Stephen Pynenburg"
      To: "curl with PHP"
      Subject: Re: post then get help
      Date: Mon, 7 Jul 2008 18:39:08 -0400

      My recommendation would be to do your first POST request
      normally, then take the data you get and use a little bit of
      the redir_exec function:

      list($header, $data) = explode("\n\n", $data, 2);
      $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      if ($http_code == 301 || $http_code == 302) {
      $matches = array();
      preg_match('/Location:(.*?)\n/ ', $header, $matches);
      $url = @parse_url(trim(array_pop($matches)));

      To get the next URL, then just do a while loop, with a cURL
      GET request in it, until there are no more URLs.

      -Stephen

      2008/7/7 ryan pal <ryanpal_at_mail.com>:

        i'm trying to figure out how i can do a "post" then a
        "get". due to restrictions on my server, i have to use
        the redirect script found on php.net: function
        curl_redir_exec($ch,$debug="")
        {
        static $curl_loops = 0;
        static $curl_max_loops = 20; if ($curl_loops++ >=
        $curl_max_loops)
        {
        $curl_loops = 0;
        return FALSE;
        }
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $data = curl_exec($ch);
        list($header, $data) = explode("\n\n", $data, 2);
        $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if ($http_code == 301 || $http_code == 302) {
        $matches = array();
        preg_match('/Location:(.*?)\n/', $header, $matches);
        $url = @parse_url(trim(array_pop($matches)));
        //print_r($url);
        if (!$url)
        {
        //couldn't process the url to redirect to
        $curl_loops = 0;
        return $data;
        }
        $last_url = parse_url(curl_getinfo($ch,
        CURLINFO_EFFECTIVE_URL));
        /* if (!$url['scheme'])
        $url['scheme'] = $last_url['scheme'];
        if (!$url['host'])
        $url['host'] = $last_url['host'];
        if (!$url['path'])
        $url['path'] = $last_url['path'];*/
        $new_url = $url['scheme'] . '://' . $url['host'] .
        $url['path'] . ($url['query']?'?'.$url['query']:'');
        curl_setopt($ch, CURLOPT_URL, $new_url);
        // debug('Redirecting to', $new_url); return
        curl_redir_exec($ch);
        } else {
        $curl_loops=0;
        return $data;
        } i have my curl_setopt to POST, but need to do GET
        also. how do setup my code so that i post and then do a
        get for the next few redirects?
        -- Be Yourself @ mail.com!
        Choose From 200+ Email Addresses
        Get a Free Account at www.mail.com!
        _______________________________________________
        http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php

      _______________________________________________
      http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php

    -- Be Yourself @ mail.com!
    Choose From 200+ Email Addresses
    Get a Free Account at www.mail.com!
    _______________________________________________
    http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php

  _______________________________________________
  http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php

-- 
Be Yourself @ mail.com!
Choose From 200+ Email Addresses
Get a Free Account at www.mail.com

_______________________________________________
http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php
Received on 2008-07-08