I am using http_url_post_raw in a web app, it is sometimes working, sometimes not. The request (URL) can be exactly the same and sometimes it will work, sometimes not. When it fails, i get a -1 return code and MSG = Received HTTP 200 during post request. Can anyone shed some light on what i should do to get this to work consistently? Thanks-
Mike Leach
--- On Tue 07/12, Eric Jones < Eric.Jones@xxxxxxxxxx > wrote:
From: Eric Jones [mailto: Eric.Jones@xxxxxxxxxx] To: ftpapi@xxxxxxxxxxxxx Date: Tue, 12 Jul 2005 14:08:34 -0700 Subject: Re: HTTPAPI 1.11 pre-release - no data received with POST
You are awesome, thanks so much! Once again that did the trick.... I had tried all kinds of things coding 'application/x-www-form-urlencoded' onto the front of my XML data etc. Thanks, Eric
>>> sk@xxxxxxxxxxxxxxxx 07/12/05 1:42 PM >>>
Sender: Scott Klement
Hi Eric,
> The bad news is my Vendor tells me that don't receive any of it with the > "post" method? They have a "debug" site that I can "post" to it returns > the following message to me... [SNIP]
You sent me your code off-list, and it contains the following statement:
c eval rc = http_url_post( c 'http://xxxx.xxxxxx.com/API/' + c 'mailing_list.html' c : myPointer c
: dataSize c : '/tmp/testpost.xml')
That statement is okay, except that it doesn't tell the web server what type of content you're sending. That's not a problem with a GET request because the data type is always the same -- it's always a URL encoded web form, since that's really the only thing that you CAN send with GET.
HTTPAPI has a "default" content-type that's set in the CONFIG_H source member. That default is "text/xml" meaning that you are uploading an XML document to the server.
Here's where it gets confusing: Although your document IS an XML document, it's not sent as one. Instead, it's sent as a URL encoded web form. So, technically "text/xml" is wrong for your document, even though it's XML. Instead, it needs to be sent as "application/x-www-form-urlencoded".
Now, that's not a problem in my EXAMPLE2 because my web server is stupid. It ignores the content
type, and just assumes that whatever you send is valid for it's purposes. This demo site is smarter. It will ignore data that's not of the type it's expecting.
Anyway, it's pretty easy to fix. Just change your HTTP_url_post() call to look like this:
c eval rc = http_url_post( c 'http://xxxx.xxxxxx.com/API/' + c 'mailing_list.html' c : myPointer c : dataSize c : '/tmp/testpost.xml' c : HTTP_TIMEOUT c : HTTP_USERAGENT c : 'application/x-www-form-urlencoded')
The HTTP_TIMEOUT is the default value for timeouts in HTTPAPI. You can pass that value any time you want to use the
default. Likewise, HTTP_USERAGENT is the default value for the user-agent parameter.
Then, in the last parameter, I'm telling it that the content type is a URL-encoded web form. That will cause the server to interpret it properly. I tested it with your code, and it seemed to solve the problem.
Let us know if it works from your machine as well.
Thanks! ----------------------------------------------------------------------- This is the FTPAPI mailing list. To unsubsribe from the list send mail to majordomo@xxxxxxxxxxxxx with the body: unsubscribe ftpapi mymailaddr -----------------------------------------------------------------------
|