Jump to content

curl php script works on localhost windows, but not on linux server


jjk2

Recommended Posts

i have a simple curl script thats proven to work. it basically logs in to ebay.com

 

it runs fine on commandline through WAMPserver running on my windows, and my other windows servers, but it will not work on any linux server.

 

the script executes, but the result is that i am not logged on to ebay when i run the script on linux server.

Link to comment
Share on other sites

And you did turn on error_reporting, yes? It could be that the cURL extension wasn't installed, for example. Since you're logging into ebay, it could also be an SSL issue - are you ignoring ebay's certificate or providing certificates to verify against? Are you checking the return of curl_error()? Basically, we could do with seeing some code.

Link to comment
Share on other sites

i have a problem similar to this guy

 

http://forums.devnetwork.net/viewtopic.php?f=1&t=89757&p=492636

 

using verbose output, i see that LINUX webserver is making GET where as in windows localhost (Wampserver), it used POST. i also test it out on a windows server, and the script works fine....

 

of course, the script running on linux executes fine, but because its using GET, it fails.

 

the windows one succeeds because it uses POST method, as it should.

 

it uses LIB_http.php, a library from a php book.

 

i heard that setting CURLOPT_POST after CURLOPT_POSTFIELDS, causes problems....i discovered that post was after curlop_postfields as below....maybe this was causing problems in linux webserver?

 

<?php
define("WEBBOT_NAME", "Googlebot/2.1 (http://www.googlebot.com/bot.html)");


define("CURL_TIMEOUT", 200);


define("COOKIE_FILE", "C:/wamp/www/tor/cookie.txt");
define("HEAD", "HEAD");
define("GET",  "GET");
define("POST", "POST");


define("EXCL_HEAD", FALSE);
define("INCL_HEAD", TRUE);


function http_get($target, $ref)
    {
    return http($target, $ref, $method="GET", $data_array="", EXCL_HEAD);
    }


function http_get_withheader($target, $ref)
    {
    return http($target, $ref, $method="GET", $data_array="", INCL_HEAD);
    }


function http_get_form($target, $ref, $data_array)
    {
    return http($target, $ref, $method="GET", $data_array, EXCL_HEAD);
    }


function http_get_form_withheader($target, $ref, $data_array)
    {
    return http($target, $ref, $method="GET", $data_array, INCL_HEAD);
    }


function http_post_form($target, $ref, $data_array)
    {
    return http($target, $ref, $method="POST", $data_array, EXCL_HEAD);
    }

function http_post_withheader($target, $ref, $data_array)
    {
    return http($target, $ref, $method="POST", $data_array, INCL_HEAD);
    }

function http_header($target, $ref)
    {
    return http($target, $ref, $method="HEAD", $data_array="", INCL_HEAD);
    }


function http($target, $ref, $method, $data_array, $incl_head)
{
    # Initialize PHP/CURL handle
$ch = curl_init();

    # Prcess data, if presented
    if(is_array($data_array))
        {
    # Convert data array into a query string (ie animal=dog&sport=baseball)
        foreach ($data_array as $key => $value) 
            {
            if(strlen(trim($value))>0)
                $temp_string[] = $key . "=" . urlencode($value);
            else
                $temp_string[] = $key;
            }
        $query_string = join('&', $temp_string);
        }
        
    # HEAD method configuration
    if($method == HEAD)
        {
    	curl_setopt($ch, CURLOPT_HEADER, TRUE);                // No http head
    curl_setopt($ch, CURLOPT_NOBODY, TRUE);                // Return body
        }
    else
        {
        # GET method configuration
        if($method == GET)
            {
            if(isset($query_string))
                $target = $target . "?" . $query_string;
            curl_setopt ($ch, CURLOPT_HTTPGET, TRUE); 
            curl_setopt ($ch, CURLOPT_POST, FALSE); 
            }
        # POST method configuration
        if($method == POST)
            {
            if(isset($query_string))
                curl_setopt ($ch, CURLOPT_POSTFIELDS, $query_string);
            curl_setopt ($ch, CURLOPT_POST, TRUE); 
            curl_setopt ($ch, CURLOPT_HTTPGET, FALSE); 
            }
    	curl_setopt($ch, CURLOPT_HEADER, $incl_head);   // Include head as needed
    curl_setopt($ch, CURLOPT_NOBODY, FALSE);        // Return body
        }
        
curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE_FILE);   // Cookie management.
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE);
//curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:8118"); // ENABLE TOR
curl_setopt($ch, CURLOPT_TIMEOUT, CURL_TIMEOUT);    // Timeout
curl_setopt($ch, CURLOPT_USERAGENT, WEBBOT_NAME);   // Webbot name
curl_setopt($ch, CURLOPT_URL, $target);             // Target site
curl_setopt($ch, CURLOPT_REFERER, $ref);            // Referer value
curl_setopt($ch, CURLOPT_VERBOSE, FALSE);           // Minimize logs
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    // No certificate
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);     // Follow redirects
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);             // Limit redirections to four
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);     // Return in string
  
    # Create return array
    $return_array['FILE']   = curl_exec($ch); 
    $return_array['STATUS'] = curl_getinfo($ch);
    $return_array['ERROR']  = curl_error($ch);
    
    # Close PHP/CURL handle
  	curl_close($ch);
    
    # Return results
  	return $return_array;
    }
    
    
?>

 

 

 

 

Link to comment
Share on other sites

The only thing i can obviously see wrong is that all of these test on method:

 

if($method == HEAD)

 

Are using an unquoted string. They should be:

 

if($method == "HEAD")

 

Now, given the fact that you've not mentioned you're getting a warning about that, i'm going to assume that either you don't have error_reporting set to E_ALL or that you don't have display_errors turned on or both. Go do that and run the script again.

Link to comment
Share on other sites

there is nothing in error_log.

 

the script works fine on windows.

 

but somehow the script behaves differently in linux. i've fixed 50% of it. just by moving some of the curlopt, apparently theres some bugs with curl.

 

so i am convinced lib_http has some problems.....just dont know why it fails when it uses POST.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.