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

curl-and-php

Re: Curl won't POST?

From: Stephen Pynenburg <spynenburg_at_gmail.com>
Date: Sun, 11 Jan 2009 22:39:10 -0500

"Edit":
The code seems to use:
http($target, $ref, $method="POST", $data_array, INCL_HEAD);
whereas you have
http($target, $ref, "POST", $data_array, INCL_HEAD);
maybe try doing it like that?

On Sun, Jan 11, 2009 at 10:37 PM, Stephen Pynenburg <spynenburg_at_gmail.com>wrote:

> Glancing at the code, the function http() says: if($method == POST) - note
> that POST is not a string, as you are passing it into the function as. I'm
> guessing it's a predefined variable in the class elsewhere.
>
> Moreover, the posted code says:
> # http()
> # A common routine called by all of the previously described
> # functions. You should always use one of the other wrappers for this
> # routine and not call it directly.
> You might want to consider just calling the other function, http_post_form,
> as it would probably be somewhat simpler.
>
> -Stephen
>
>
> 2009/1/11 <webmaster_at_simplymachine.com>
>
>> I've searched the list but I don't see any similar problem. I'm using
>> simple code from a book to send POST data with curl and it's coming through
>> as GET instead, and with no variables appearing. I've tried this on two
>> different servers. Is there some type of restrictive setting blocking this?
>> The code is as follows:
>>
>>
>> <?php
>> include("LIB_http.php");
>>
>> $action = "http://www.schrenk.com/nostarch/webbots/form_analyzer.php";
>> $method = "POST";
>> $ref="";
>> $data_array['term']="hello";
>> $response=http($target=$action, $ref, $method, $data_array, EXCL_HEAD);
>> print_r($response);
>> ?>
>>
>>
>> and this is lib_http.php:
>>
>>
>> <?php
>> /*
>> ########################################################################
>>
>> Copyright 2007, Michael
>> Schrenk
>>
>> This software is designed for use with the
>> book,
>> "Webbots, Spiders, and Screen Scarpers", Michael Schrenk, 2007 No
>> Starch Press, San Francisco CA
>>
>>
>> W3C(R) SOFTWARE NOTICE AND
>> LICENSE
>>
>>
>>
>> This work (and included software, documentation such as READMEs, or
>> other
>> related items) is being provided by the copyright holders under the
>> following license.
>> By obtaining, using and/or copying this work, you (the licensee) agree
>> that you have read,
>> understood, and will comply with the following terms and
>> conditions.
>>
>>
>> Permission to copy, modify, and distribute this software and its
>> documentation, with or
>> without modification, for any purpose and without fee or royalty is hereby
>> granted, provided
>> that you include the following on ALL copies of the software and
>> documentation or portions thereof,
>> including
>> modifications:
>>
>> 1. The full text of this NOTICE in a location viewable to users of the
>> redistributed
>> or derivative
>> work.
>>
>> 2. Any pre-existing intellectual property disclaimers, notices, or
>> terms and conditions.
>> If none exist, the W3C Software Short Notice should be included
>> (hypertext is preferred,
>> text is permitted) within the body of any redistributed or
>> derivative code.
>> 3. Notice of any changes or modifications to the files, including the
>> date changes were made.
>> (We recommend you provide URIs to the location from which the code
>> is derived.)
>>
>>
>> THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
>> MAKE NO REPRESENTATIONS OR
>> WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES
>> OF MERCHANTABILITY OR FITNESS
>> FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR
>> DOCUMENTATION WILL NOT INFRINGE ANY THIRD
>> PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER
>> RIGHTS.
>>
>>
>> COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
>> CONSEQUENTIAL DAMAGES ARISING OUT
>> OF ANY USE OF THE SOFTWARE OR
>> DOCUMENTATION.
>>
>>
>>
>> The name and trademarks of copyright holders may NOT be used in
>> advertising or publicity pertaining to the
>> software without specific, written prior permission. Title to copyright in
>> this software and any associated
>> documentation will at all times remain with copyright
>> holders.
>> ########################################################################
>>
>> */
>>
>> #-----------------------------------------------------------------------
>> # LIB_http
>> #
>> # F U N C T I O N S
>> #
>> # http_get()
>> # Fetches a file from the Internet with the HTTP protocol
>> # http_header()
>> # Same as http_get(), but only returns HTTP header instead of
>> # the normal file contents
>> # http_get_form()
>> # Submits a form with the GET method
>> # http_get_form_withheader()
>> # Same as http_get_form(), but only returns HTTP header instead of
>> # the normal file contents
>> # http_post_form()
>> # Submits a form with the POST method
>> # http_post_withheader()
>> # Same as http_post_form(), but only returns HTTP header instead of
>> # the normal file contents
>> # http_header()
>> #
>> # http()
>> # A common routine called by all of the previously described
>> # functions. You should always use one of the other wrappers for this
>> # routine and not call it directly.
>> #
>> #-----------------------------------------------------------------------
>> # R E T U R N E D D A T A
>> # All of these routines return a three dimensional array defined as
>> # follows:
>> # $return_array['FILE'] = Contents of fetched file, will also
>> # include the HTTP header if requested
>> # $return_array['STATUS'] = CURL generated status of transfer
>> # $return_array['ERROR'] = CURL generated error status
>> ########################################################################
>>
>> /***********************************************************************
>> Webbot defaults (scope = global)
>> ----------------------------------------------------------------------*/
>> # Define how your webbot will appear in server logs
>> define("WEBBOT_NAME", "Test Webbot");
>>
>> # Length of time cURL will wait for a response (seconds)
>> define("CURL_TIMEOUT", 25);
>>
>> # Location of your cookie file. (Must be fully resolved local address)
>> define("COOKIE_FILE", "c:\cookie.txt");
>>
>> # DEFINE METHOD CONSTANTS
>> define("HEAD", "HEAD");
>> define("GET", "GET");
>> define("POST", "POST");
>>
>> # DEFINE HEADER INCLUSION
>> define("EXCL_HEAD", FALSE);
>> define("INCL_HEAD", TRUE);
>>
>> /***********************************************************************
>> User interfaces
>> -------------------------------------------------------------
>> */
>>
>> /***********************************************************************
>> function http_get($target, $ref)
>> -------------------------------------------------------------
>> DESCRIPTION:
>> Downloads an ASCII file without the http header
>> INPUT:
>> $target The target file (to download)
>> $ref The server referer variable
>> OUTPUT:
>> $return_array['FILE'] = Contents of fetched file, will also
>> include the HTTP header if requested
>> $return_array['STATUS'] = CURL generated status of transfer
>> $return_array['ERROR'] = CURL generated error status
>> ***********************************************************************/
>> function http_get($target, $ref)
>> {
>> return http($target, $ref, $method="GET", $data_array="", EXCL_HEAD);
>> }
>>
>> /***********************************************************************
>> http_get_withheader($target, $ref)
>> -------------------------------------------------------------
>> DESCRIPTION:
>> Downloads an ASCII file with the http header
>> INPUT:
>> $target The target file (to download)
>> $ref The server referer variable
>> OUTPUT:
>> $return_array['FILE'] = Contents of fetched file, will also
>> include the HTTP header if requested
>> $return_array['STATUS'] = CURL generated status of transfer
>> $return_array['ERROR'] = CURL generated error status
>> ***********************************************************************/
>> function http_get_withheader($target, $ref)
>> {
>> return http($target, $ref, $method="GET", $data_array="", INCL_HEAD);
>> }
>>
>> /***********************************************************************
>> http_get_form($target, $ref, $data_array)
>> -------------------------------------------------------------
>> DESCRIPTION:
>> Submits a form with the GET method and downloads the page
>> (without a http header) referenced by the form's ACTION variable
>> INPUT:
>> $target The target file (to download)
>> $ref The server referer variable
>> $data_array An array that defines the form variables
>> (See "Webbots, Spiders, and Screen Scrapers" for
>> more information about $data_array)
>> OUTPUT:
>> $return_array['FILE'] = Contents of fetched file, will also
>> include the HTTP header if requested
>> $return_array['STATUS'] = CURL generated status of transfer
>> $return_array['ERROR'] = CURL generated error status
>> ***********************************************************************/
>> function http_get_form($target, $ref, $data_array)
>> {
>> return http($target, $ref, $method="GET", $data_array, EXCL_HEAD);
>> }
>>
>> /***********************************************************************
>> http_get_form_withheader($target, $ref, $data_array)
>> -------------------------------------------------------------
>> DESCRIPTION:
>> Submits a form with the GET method and downloads the page
>> (with http header) referenced by the form's ACTION variable
>> INPUT:
>> $target The target file (to download)
>> $ref The server referer variable
>> $data_array An array that defines the form variables
>> (See "Webbots, Spiders, and Screen Scrapers" for
>> more information about $data_array)
>> OUTPUT:
>> $return_array['FILE'] = Contents of fetched file, will also
>> include the HTTP header if requested
>> $return_array['STATUS'] = CURL generated status of transfer
>> $return_array['ERROR'] = CURL generated error status
>> ***********************************************************************/
>> function http_get_form_withheader($target, $ref, $data_array)
>> {
>> return http($target, $ref, $method="GET", $data_array, INCL_HEAD);
>> }
>>
>> /***********************************************************************
>> http_post_form($target, $ref, $data_array)
>> -------------------------------------------------------------
>> DESCRIPTION:
>> Submits a form with the POST method and downloads the page
>> (without http header) referenced by the form's ACTION variable
>> INPUT:
>> $target The target file (to download)
>> $ref The server referer variable
>> $data_array An array that defines the form variables
>> (See "Webbots, Spiders, and Screen Scrapers" for
>> more information about $data_array)
>> OUTPUT:
>> $return_array['FILE'] = Contents of fetched file, will also
>> include the HTTP header if requested
>> $return_array['STATUS'] = CURL generated status of transfer
>> $return_array['ERROR'] = CURL generated error status
>> ***********************************************************************/
>> 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);
>> }
>>
>> /***********************************************************************
>> http($url, $ref, $method, $data_array, $incl_head)
>> -------------------------------------------------------------
>> DESCRIPTION:
>> This function returns a web page (HTML only) for a web page through
>> the execution of a simple HTTP GET request.
>> All HTTP redirects are automatically followed.
>>
>> IT IS BEST TO USE ONE THE EARLIER DEFINED USER INTERFACES
>> FOR THIS FUNCTION
>>
>> INPUTS:
>> $target Address of the target web site
>> $ref Address of the target web site's referrer
>> $method Defines request HTTP method; HEAD, GET or POST
>> $data_array A keyed array, containing query string
>> $incl_head TRUE = include http header
>> FALSE = don't include http header
>>
>> RETURNS:
>> $return_array['FILE'] = Contents of fetched file, will also
>> include the HTTP header if requested
>> $return_array['STATUS'] = CURL generated status of transfer
>> $return_array['ERROR'] = CURL generated error status
>> ***********************************************************************/
>> 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_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;
>> }
>> ?>
>>
>> _______________________________________________
>> http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php
>>
>>
>

_______________________________________________
http://cool.haxx.se/cgi-bin/mailman/listinfo/curl-and-php
Received on 2009-01-12