]> granicus.if.org Git - curl/commitdiff
NOBODY set TRUE after a POST makes a good HEAD now
authorDaniel Stenberg <daniel@haxx.se>
Wed, 30 Jun 2004 11:09:16 +0000 (11:09 +0000)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 30 Jun 2004 11:09:16 +0000 (11:09 +0000)
CHANGES
lib/url.c
tests/data/Makefile.am
tests/data/test514 [new file with mode: 0644]
tests/libtest/Makefile.am
tests/libtest/lib514.c [new file with mode: 0644]

diff --git a/CHANGES b/CHANGES
index 0154c2ee2c56d027c83f85860d848360cbb16270..9f9acccd3e653399f2c5c4220657873a0518d751 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,7 +6,19 @@
 
                                   Changelog
 
+Daniel (30 June 2004)
+- Niels van Tongeren found that setting CURLOPT_NOBODY to TRUE doesn't disable
+  a previously set POST request, making a very odd request get sent (unless
+  you disabled the POST) a HEAD request with a POST request-body. I've now
+  made CURLOPT_NOBODY enforce a proper HEAD. Added test case 514 for this.
+
 Daniel (29 June 2004)
+- Günter Knauf made the testcurl.pl script capable of using a custom setup
+  file to easier run multiple autobuilds on the same source tree.
+
+- Gisle fixed the djgpp build and fixed a memory problem in some of the
+  reorged name resolved code.
+
 - Fixed code to allow connects done using the multi interface to attempt the
   next IP when connecting to a host that resolves to multiple IPs and a
   connect attempt fails.
index 59d674ca1fb6388c51718bc30de9e977c2f9bf1f..3fbc7b3e6fd3fa655ff0b638ef8b9332d135c055 100644 (file)
--- a/lib/url.c
+++ b/lib/url.c
@@ -488,6 +488,9 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...)
      * Do not include the body part in the output data stream.
      */
     data->set.opt_no_body = va_arg(param, long)?TRUE:FALSE;
+    if(data->set.opt_no_body)
+      /* in HTTP lingo, this means using the HEAD request */
+      data->set.httpreq = HTTPREQ_HEAD;
     break;
   case CURLOPT_FAILONERROR:
     /*
index 2d9aba889e3fb01e06255daf386dc2307e16774b..46208a6ab1ce5b815b1dad4a0f4fe6aed3f6b05c 100644 (file)
@@ -25,7 +25,7 @@ EXTRA_DIST = test1 test108 test117 test127 test20 test27 test34 test46        \
  test158 test159 test511 test160 test161 test162 test163 test164       \
  test512 test165 test166 test167 test168 test169 test170 test171       \
  test172 test204 test205 test173 test174 test175 test176 test177       \
- test513
+ test513 test514
 
 # The following tests have been removed from the dist since they no longer
 # work. We need to fix the test suite's FTPS server first, then bring them
diff --git a/tests/data/test514 b/tests/data/test514
new file mode 100644 (file)
index 0000000..06fc668
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Server-side
+<reply>
+<data>
+HTTP/1.1 200 OK
+Date: Thu, 09 Nov 2010 14:49:00 GMT
+Server: test-server/fake
+Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
+ETag: "21025-dc7-39462498"
+Accept-Ranges: bytes
+Content-Length: 6
+Connection: close
+Content-Type: text/html
+Funny-head: yesyes
+
+</data>
+</reply>
+
+#
+# Client-side
+<client>
+<server>
+http
+</server>
+<tool>
+lib514
+</tool>
+ <name>
+First set options to POST and then to make HEAD
+ </name>
+ <command>
+http://%HOSTIP:%HOSTPORT/514
+</command>
+</client>
+
+#
+# Verify data after the test has been "shot"
+<verify>
+<strip>
+^User-Agent:.*
+</strip>
+<protocol>
+HEAD /514 HTTP/1.1\r
+Host: 127.0.0.1:8999\r
+Pragma: no-cache\r
+Accept: */*\r
+\r
+</protocol>
+</verify>
index d659cca1b52c92fa108d85635cbd1e75ed6c9361..688c7a4b2eccd948cfccd95e6c545cb098e5cc6f 100644 (file)
@@ -39,7 +39,7 @@ SUPPORTFILES = first.c test.h
 
 # These are all libcurl test programs
 noinst_PROGRAMS = lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 \
-  lib508 lib509 lib510 lib511 lib512 lib513
+  lib508 lib509 lib510 lib511 lib512 lib513 lib514
 
 lib500_SOURCES = lib500.c $(SUPPORTFILES)
 lib500_LDADD = $(LIBDIR)/libcurl.la
@@ -96,3 +96,7 @@ lib512_DEPENDENCIES = $(LIBDIR)/libcurl.la
 lib513_SOURCES = lib513.c $(SUPPORTFILES)
 lib513_LDADD = $(LIBDIR)/libcurl.la
 lib513_DEPENDENCIES = $(LIBDIR)/libcurl.la
+
+lib514_SOURCES = lib514.c $(SUPPORTFILES)
+lib514_LDADD = $(LIBDIR)/libcurl.la
+lib514_DEPENDENCIES = $(LIBDIR)/libcurl.la
diff --git a/tests/libtest/lib514.c b/tests/libtest/lib514.c
new file mode 100644 (file)
index 0000000..7100fd8
--- /dev/null
@@ -0,0 +1,43 @@
+#include "test.h"
+
+int test(char *URL)
+{
+  CURL *curl;
+  CURLcode res=CURLE_OK;
+
+  curl = curl_easy_init();
+  if(curl) {
+    /* First set the URL that is about to receive our POST. */
+    curl_easy_setopt(curl, CURLOPT_URL, URL);
+
+    /* Based on a bug report by Niels van Tongeren on June 29, 2004:
+
+    A weird situation occurs when request 1 is a POST request and the request
+    2 is a HEAD request. For the POST request we set the CURLOPT_POSTFIELDS,
+    CURLOPT_POSTFIELDSIZE and CURLOPT_POST options. For the HEAD request we
+    set the CURLOPT_NOBODY option to '1'.
+
+    */
+
+    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "moo");
+    curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 3);
+    curl_easy_setopt(curl, CURLOPT_POST, 1);
+
+    /* this is where transfer 1 would take place, but skip that and change
+       options right away instead */
+
+    curl_easy_setopt(curl, CURLOPT_NOBODY, 1);
+
+    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); /* show verbose for debug */
+    curl_easy_setopt(curl, CURLOPT_HEADER, 1); /* include header */
+
+    /* Now, we should be making a fine HEAD request */
+
+    /* Perform the request 2, res will get the return code */
+    res = curl_easy_perform(curl);
+
+    /* always cleanup */
+    curl_easy_cleanup(curl);
+  }
+  return (int)res;
+}