curl-and-php
Re: post then get help
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