471,073 Members | 1,308 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,073 software developers and data experts.

CURL Problem.. Comparing output from IE/CURL differs

I'm writing a tiny php app that will log into our bank of america
account and retrieve a file containing a list of checks that cleared
the previous day. The problem I'm running into is when I perform
actions with php/CURL the output is different than when I use IE and
I'm completely stumped as to why. The final output should list files
available for retrieval but the CURL output displays an error/empty
file message.

Here is the curl portion of my code

global $ERROR_MESSAGE;

$ch = curl_init();
$POSTFIELDS =
"remote=MYLOGIN&password=MYPASSWORD&Submit=Submit& operation=LOGON";

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL,
"https://elink-http4.bankofamerica.com/servlet/MailboxServlet");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE
5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$POSTFIELDS");
curl_setopt($ch, CURLOPT_COOKIEJAR, "/ReconsileCookie");

$stuff=curl_exec($ch);
curl_close($ch);

echo $stuff;
$pos = strrpos($stuff, "Logon is successful.");
if ($pos === false)
$ERROR_MESSAGE = "\tUnable to login.\n";

if (curl_errno($ch))
$ERROR_MESSAGE = "\t" . curl_error($ch) . "\n";
if ($ERROR_MESSAGE == "") { // Login succesfull... Continue retrieval
of file
$ch = curl_init();

$formvars = array();
$formvars["Submit"]="Submit";
$formvars["operation"]="DIRECTORY";

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_URL,
"https://elink-http4.bankofamerica.com/servlet/MailboxServlet");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE
5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $formvars);
curl_setopt($ch, CURLOPT_COOKIEFILE, "/ReconsileCookie");

$stuff=curl_exec($ch);
curl_close($ch);
echo $stuff;

$pos = strrpos($stuff, "Send is successful.");
if ($pos === false)
$ERROR_MESSAGE ="\tFailed to send edi.txt to bank.\n";
if (curl_errno($ch))
$ERROR_MESSAGE = "\t" . curl_error($ch) . "\n";

}

Below is the output I get when I execute the above portion of code

<html>
<body>

<HTML>
<HEAD><LINK rel="stylesheet" type="text/css" name="defaultstyle"
href="/cehttp/html/style.css">
<TITLE>Servlet Response Message</TITLE></HEAD>
<BODY>
<H2 align=center>Servlet has returned the following message</H2>
<HR>
Logon is successful.
<HR>
</BODY></HTML>
<HTML>
<HEAD><LINK rel="stylesheet" type="text/css" name="defaultstyle"
href="/cehttp/html/style.css">
<TITLE>Servlet Response Message</TITLE></HEAD>
<BODY>
<H2 align=center>Servlet has returned the following message</H2>
<HR>
The file is empty or does not exist. Return Code: 701
<HR>
</BODY></HTML>

</body>
</html>
Now, if I use IE to login to the website I recieve

<HTML>
<HEAD><LINK rel="stylesheet" type="text/css" name="defaultstyle"
href="/cehttp/html/style.css">
<TITLE>Servlet Response Message</TITLE></HEAD>
<BODY>
<H2 align=center>Servlet has returned the following message</H2>
<HR>
Logon is successful.
<HR>
</BODY></HTML>

After I login I continue with the button to display my file directory
contents and the output is as follows
<HTML><HEAD><LINK rel="stylesheet" type="text/css" name="defaultstyle"
href="/cehttp/html/style.css">
<TITLE>CONNECT:Enterprise -Directory</TITLE></HEAD>
<BODY>
<CENTER><TABLE BORDER=1>
<CAPTION>CONNECT:Enterprise Directory Contents</CAPTION>
<TR>
<TH>Mailbox</TH>
<TH>Batch#</TH>
<TH>Size</TH>
<TH>Description (Batch ID)</TH>
<TH>Creation Date</TH>
<TH>Creation Time</TH>
<TH>Flags</TH>
</Table></CENTER>
<CENTER>Number of batches: 0</CENTER>
</BODY></HTML>

Here is the HTML source for the login page.
<HTML>
<HEAD>
<LINK rel="stylesheet" type="text/css"
name="defaultstyle" href="style.css"><TITLE>CONNECT:Enterprise -
Logon</TITLE>
</HEAD>
<BODY >
<H2>Logon Option</H2>

<FORM METHOD="POST" ACTION="/servlet/MailboxServlet">

<P><table border=1 cellpadding=4 cellspacing=4
summary="Instruction box"><tr><td bgcolor="#CC0000"><font
color="#FFFFFF"><b>To log on, fill in the necessary fields below and
click on the Submit button.</b></font>
</td></tr>
</table></P>

<table border=0 cellpadding=0 cellspacing=0>
<tr><td>User ID: </td><td><INPUT TYPE="TEXT"
NAME="remote" SIZE="9" MAXLENGTH="64"></td></tr>
<tr><td>Password:</td><td><INPUT
TYPE="PASSWORD" NAME="password" SIZE="9" MAXLENGTH="16"></td></tr>

</table>

<P><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Submit"
CHECKED="CHECKED">
<INPUT TYPE="RESET" NAME="Cancel" VALUE="Reset"></P>
<INPUT TYPE="HIDDEN" NAME="operation" VALUE="LOGON">

</FORM>
</BODY>
</HTML>

And here is the source for the 2nd Post data page

<HTML>

<HEAD>
<LINK rel="stylesheet" type="text/css" href="style.css">
<TITLE>CONNECT:Enterprise - Directory</TITLE>

</HEAD>

<BODY>
<FORM METHOD="POST" ACTION="/servlet/MailboxServlet">

<H2>Directory Option</h2>

<table border=1 cellpadding=4 cellspacing=4 summary="Instruction
box"><tr><td bgcolor="CC0000"><font color="#FFFFFF"><strong>To see and
download available files, click on the Submit
button.</strong></font></td></tr>
</table>
<br>

<P><INPUT TYPE="SUBMIT" NAME="Submit" VALUE="Submit" CHECKED="CHECKED">
<INPUT TYPE="HIDDEN" NAME="operation" VALUE="DIRECTORY"></P><br>
</FORM>
</BODY>
</HTML>

Any ideas as to why CURL produces different results? Also I've already
used a CURL based app using almost the identical code above to login
and send a checks cut today file which correctly works..
Thanks
Eric Wescott

Nov 7 '05 #1
6 4068
On 7 Nov 2005 13:51:53 -0800, "Wescotte" <we******@earthlink.net> wrote:
curl_setopt($ch, CURLOPT_COOKIEJAR, "/ReconsileCookie");


From a brief glance this is the only bit that looked slightly odd - is this a
valid, writable file for the cookie jar?
--
Andy Hassall :: an**@andyh.co.uk :: http://www.andyh.co.uk
http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
Nov 8 '05 #2
Yes, the cookie itself is correctly created and correctly loaded.
Originally I set it to just "cookie" but I wanted to keep it seperate
so I changed the name to a more recognizable one.

Nov 8 '05 #3
I found the issue..
If I use
curl_setopt($ch, CURLOPT_POSTFIELDS,
"operation=DIRECTORY&Submit=Submit");

it works
but with

$formvars = array();
$formvars["Submit"]="Submit";
$formvars["operation"]="DIRECTORY";
curl_setopt($ch, CURLOPT_POSTFIELDS, $formsvars);

it does not..
Any idea why?

Nov 9 '05 #4
On 9 Nov 2005 08:55:31 -0800, "Wescotte" <we******@earthlink.net> wrote:
I found the issue..
If I use
curl_setopt($ch, CURLOPT_POSTFIELDS,
"operation=DIRECTORY&Submit=Submit");

it works
but with

$formvars = array();
$formvars["Submit"]="Submit";
$formvars["operation"]="DIRECTORY";
curl_setopt($ch, CURLOPT_POSTFIELDS, $formsvars);

it does not..
Any idea why?


Maybe:

http://cvs.php.net/php-src/ext/curl/interface.c

Particularly look at revisions 1.30 and 1.46 and the bug it references?

It's not exactly well documented when you're supposed to pass as the parameter
when using CURLOPT_POSTFIELDS.

' CURLOPT_POSTFIELDS The full data to post in a HTTP "POST" operation.'

This seems to mean the raw POST data as per your first bit of code, but some
versions of the PHP curl extension seem to accept arrays (which is useful).
Looking at the code it appears to accept objects too.
--
Andy Hassall :: an**@andyh.co.uk :: http://www.andyh.co.uk
http://www.andyhsoftware.co.uk/space :: disk and FTP usage analysis tool
Nov 9 '05 #5
Well, the strange thing is I've used an array before for passing post
data and it worked correctly.

Nov 9 '05 #6
Hello,

on 11/07/2005 07:51 PM Wescotte said the following:
Any ideas as to why CURL produces different results? Also I've already
used a CURL based app using almost the identical code above to login
and send a checks cut today file which correctly works..


I have seen this behaviour with some version of Curl that do not handle
HTTP 1.1 responses with code 100. This is not an error but CUrl could
not handle it properly.

Personally I use this HTTP client class that uses fsockopen with OpenSSL
when available. Otherwise, internally it falls back to curl but changes
the request a bit to avoid the bug. You may want to try the class to see
if it solves your problem too:

http://www.phpclasses.org/httpclient
--

Regards,
Manuel Lemos

Metastorage - Data object relational mapping layer generator
http://www.metastorage.net/

PHP Classes - Free ready to use OOP components written in PHP
http://www.phpclasses.org/
Nov 22 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by D Benfer | last post: by
3 posts views Thread by Chris Fortune | last post: by
1 post views Thread by lists04 | last post: by
9 posts views Thread by Conrad F | last post: by
3 posts views Thread by Leo | last post: by
2 posts views Thread by lookee | last post: by
3 posts views Thread by iskeletor | last post: by
3 posts views Thread by Matthias Leopold | last post: by
reply views Thread by leo001 | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.