Hi,

I am trying to log into a web application using curl. The web app
sends a 302 redirect after posting the data (successful log in -
I can see the successful login in the web apps log files).

Maybe I am doing something wrong - but I have just copied the
code of _basicHTTP form curl.d to my own method to authenticate.

The exception I'll receive on perform is:

std.net.curl.CurlException@std/net/curl.d(3348): Send failed
since rewinding of the data stream failed on handle 7FCABA819400

My Code:


      void post(string url, const(void)[] sendData){
          HTTP client = HTTP();
          client.method = HTTP.Method.post;

client.addRequestHeader("Content-Type","application/x-www-form-urlencoded");

          scope (exit) {
              client.onReceiveHeader = null;
              client.onReceiveStatusLine = null;
              client.onReceive = null;
          }
          client.url = url;
          HTTP.StatusLine statusLine;
          ubyte[] content;
          string[string] headers;
          client.onReceive = (ubyte[] data)
          {
              content ~= data;
              return data.length;
          };

          if (sendData !is null &&
              (client.method == HTTP.Method.post || client.method
== HTTP.Method.put))
          {
              client.contentLength = sendData.length;
              client.onSend = delegate size_t(void[] buf)
              {
                  size_t minLen = std.algorithm.min(buf.length,
sendData.length);
                  if (minLen == 0) return 0;
                  buf[0..minLen] = sendData[0..minLen];
                  sendData = sendData[minLen..$];
                  return minLen;
              };
          }

          client.onReceiveHeader = (in char[] key,
                                    in char[] value)
          {
              if (auto v = key in headers)
              {
                  *v ~= ", ";
                  *v ~= value;
              }
              else
                  headers[key] = value.idup;
          };
          client.onReceiveStatusLine = (HTTP.StatusLine l) {
statusLine = l; };
          client.perform();

          // Default charset defined in HTTP RFC
          auto charset = "ISO-8859-1";
          if (auto v = "content-type" in headers)
          {
              auto m = match(cast(char[]) (*v),
regex("charset=([^;,]*)"));
              if (!m.empty && m.captures.length > 1)
              {
                  charset = m.captures[1].idup;
              }
          }
      }

Does anybody have a clue, what I am doing wrong?

Thanks,

Christian

Reply via email to