Re[2]: XML API, libcurl, POST Help Needed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Jochem,

Thanks very much for your help. I now have the application working. Just for
anyone elses interest here are a few comments.


>> $length = "Content-Length: 502";

JM> The way I see it your Content-Length is wrong - the
JM> length of your request in this instance would 380 bytes,
JM> based on the length of $xmlstr. but that's probably not right
JM> either.

JM> I imagine you need to set Content-Length dynamically,
JM> assuming curl doesn't do that for you ...

Yes curl does it for you I have discovered. So I removed this Content-Length and
found that it is now dynamically generated.

JM> as a side note: why bother setting all these vars then stricking
JM> them in an array - why not just stick the strings directly in the array?
JM> additionally if you don't need to use double quotes (for variable
JM> interpolation) single quotes are [marginally] faster [in theory] because
JM> no variable interpolation is attempted on them.

Because I was being a bit lazy and wanted to see more of what was going on. Of
course you are right and I have now cleaned up my code as you have suggested.

>> $a_encoding = "Accept-Encoding: gzip";

JM> not related to your current issue, but are your really accepting
JM> a gzip'ed reply? this might cause you headaches once you have the
JM> current problem solved.

Yeah this gzip is a real pain. The API specifies either a gzipped or a
compressed data transfer. Some of the returns from the server, in Germany, can
be quite large so I guess the developers wanted to save some bandwidth by
compressing the data. I have just discovered that if I leave the
Accept-Encoding: gzip out all together then the whole process works with the
data returned in plain uncompressed text :-)


>>         curl_setopt($curl, CURLOPT_POSTFIELDS, urlencode($xmlstr));

JM> I am guessing that the urlencoded $xmlstr should be given a POST parameter name,
JM> what that name is I don't know but the previous line should look something like
JM> this (*I think*):

JM> curl_setopt($curl, CURLOPT_POSTFIELDS, array('xml' => urlencode($xmlstr)));

This was where I had suspected I was having trouble. What I did find was that
the whole thing now works just by removing the urlencode all together. It
appears that the Content-Length was the problem all along and once that was
fixed and the urlencode was removed everything was fine.

JM> you might consider point the curl request to a script you control,
JM> so that you can see exactly what the request is sending.

JM>         e.g. $url = 'http://yourdomain.tld/your-curl-request-test.php';

JM> ... and have your-curl-request-test.php write all it's recieved headers, etc
JM> to a log file.

Probably a good idea for debugging.

Thanks for your help.



Regards,
Richard Luckhurst
Product Development
Exodus Systems - Sydney, Australia.
rluckhurst@xxxxxxxxxxxxx

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux