Beefy Boxes and Bandwidth Generously Provided by pair Networks
Come for the quick hacks, stay for the epiphanies.
 
PerlMonks  

Re: Can't read end data out of a socket

by pc88mxer (Vicar)
on Jul 01, 2008 at 20:42 UTC ( [id://695022]=note: print w/replies, xml ) Need Help??


in reply to Can't read end data out of a socket

Update: this is a simple suffering from buffering problem. Just turn on auto flushing $| = 1 and you'll see the HTML body.

You got a 302 response which means that the server is redirecting you to another page (see the Location: header line)

I looked at what wget does, and it seems to just stop reading after getting the header. Just look at the stderr output:

wget -d http://www.smartadserver.com/call/pubj/445/3197/138/M/52495426 +24/target? 2> /tmp/out
After reading the header it says
---response end--- 302 Object moved Registered socket 3 for persistent reuse.
So I don't think there is a body (in spite of the Content-Length: 210 header.)

Replies are listed 'Best First'.
Re^2: Can't read end data out of a socket
by sgifford (Prior) on Jul 02, 2008 at 00:34 UTC
    pc88mxer is right about buffering. You are reading all of the data, but it's not being printed. Perl (and the C STDIO library) will save up output until it has a full page of data, or if it's printing to a terminal a full line. Because the server's response doesn't contain enough data to fill a page or a newline character, Perl won't flush the buffer until STDOUT is closed. And because HTTP 1.1 uses connection keepalives by default, the read loop never exits, and so the program never exits, and so STDOUT is never closed. I also found that adding a:
    Connection: close
    header fixed the problem, since then the server closes the connection, allowing the read loop to exit and then the program.

    FYI, I found this problem using a system call tracer ( strace specifically), which is a fantastic tool for debugging these sorts of things.

Re^2: Can't read end data out of a socket
by pjotrik (Friar) on Jul 01, 2008 at 21:47 UTC
    So I don't think there is a body (in spite of the Content-Length: 210 header.)
    It's really there, the server sends a custom 302 document.

    (but I'm sorry, CapitaineCaverne, I don't have a solution other than using LWP)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://695022]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (5)
As of 2024-04-23 19:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found