Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re: HTTP::Request::Common and multipart/form-data

by bbfu (Curate)
on Apr 07, 2003 at 23:42 UTC ( #248761=note: print w/replies, xml ) Need Help??

in reply to HTTP::Request::Common and multipart/form-data

Um, the boundary in your output is technically correct, according to the appropriate RFC's. Perhaps you could clarify exactly what needs to be different?

Black flowers blossom
Fearless on my breath

  • Comment on Re: HTTP::Request::Common and multipart/form-data

Replies are listed 'Best First'.
Re: Re: HTTP::Request::Common and multipart/form-data
by jerryodom (Initiate) on Apr 08, 2003 at 15:05 UTC
    What needs to be different is that my browser and my program produce 2 very different outputs:

    Broswer gives:

    Content-Type: multipart/form-data; boundary=-------------------------- +7d32542f104c8

    And program gives

    Content-Type: multipart/form-data; boundary=xYzZY

    See how the boundary field is so different. I want them to be the same. How can I do that in code?

    Also.....the "xYzZY" boundary I'm getting. Wouldn't that imply that not a thing just happened? So something is wrong with the way I'm using this?

    I'm confusing my little brain. Help a brother out!

      According to RFC1341, "xYzZY" is technically a legal boundary. The purpose of the boundary is to separate the parts of the message. Therefore, the only real requirement is that the boundary string does not appear anywhere in the message. That's why you usually see long strings of mixed alpha-numeric characters. The RFC even recommends using a string containing a string such as "=_" that can never appear in the message for the particular encoding. But as long as the message doesn't contain the boundary, however, everything will work fine.

      It just so happens that HTTP::Request::Common uses the following code specifically to ensure that the boundary does not appear anywhere in any of the form parts. It does this by actually checking to see if the boundary is in the part, and making a new boundary if it is.

      CHECK_BOUNDARY: { for (@parts) { if (index($_, $boundary) >= 0) { # must have a better boundary $boundary = boundary(++$bno); redo CHECK_BOUNDARY; } } last; }

      So, my long-winded point is, don't worry that the boundary string is different. It will work just fine the way it is. :)

      Update: It is also important to note that the boundary string sent by your browser will almost certainly be different every time it posts the form. This is because the boundary is usually a randomly generated string, often containing elements such as the current date and time to ensure uniqueness. So it would probably be next to impossible to get your code to give the exact same boundary as your browser, every time.

      Black flowers blossom
      Fearless on my breath

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (6)
As of 2021-01-17 19:50 GMT
Find Nodes?
    Voting Booth?