Unverified Commit e431daf0 authored by Frank Gevaerts's avatar Frank Gevaerts Committed by Daniel Stenberg
Browse files

curl: add %{stderr} and %{stdout} for --write-out

Closes #3115
parent 8a49b291
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -150,7 +150,6 @@
 18.8 offer color-coded HTTP header output
 18.9 Choose the name of file in braces for complex URLs
 18.10 improve how curl works in a windows console window
 18.11 -w output to stderr
 18.12 keep running, read instructions from pipe/socket
 18.13 support metalink in http headers
 18.14 --fail without --location should treat 3xx as a failure
@@ -1014,14 +1013,6 @@ that doesn't exist on the server, just like --ftp-create-dirs.
 window, the transfer is interrupted and can get disconnected. This can
 probably be improved. See https://github.com/curl/curl/issues/322

18.11 -w output to stderr

 -w is quite useful, but not to those of us who use curl without -o or -O
 (such as for scripting through a higher level language). It would be nice to
 have an option that is exactly like -w but sends it to stderr
 instead. Proposed name: --write-stderr. See
 https://github.com/curl/curl/issues/613

18.12 keep running, read instructions from pipe/socket

 Provide an option that makes curl not exit after the last URL (or even work
+12 −0
Original line number Diff line number Diff line
@@ -15,6 +15,9 @@ text that curl thinks fit, as described below. All variables are specified as
output a newline by using \\n, a carriage return with \\r and a tab space with
\\t.

The output will be written to standard output, but this can be switched to
standard error by using %{stderr}.

.B NOTE:
The %-symbol is a special symbol in the win32-environment, where all
occurrences of % must be doubled when using this option.
@@ -103,6 +106,15 @@ second.
The result of the SSL peer certificate verification that was requested. 0
means the verification was successful. (Added in 7.19.0)
.TP
.B stderr
From this point on, the --write-out output will be written to standard
error. (Added in 7.63.0)
.TP
.B stdout
From this point on, the --write-out output will be written to standard output.
This is the default, but can be used to switch back after switching to stderr.
(Added in 7.63.0)
.TP
.B time_appconnect
The time, in seconds, it took from the start until the SSL/SSH/etc
connect/handshake to the remote host was completed. (Added in 7.19.0)
+11 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
@@ -60,6 +60,8 @@ typedef enum {
  VAR_LOCAL_PORT,
  VAR_HTTP_VERSION,
  VAR_SCHEME,
  VAR_STDOUT,
  VAR_STDERR,
  VAR_NUM_OF_VARS /* must be the last */
} replaceid;

@@ -101,6 +103,8 @@ static const struct variable replacements[]={
  {"local_port", VAR_LOCAL_PORT},
  {"http_version", VAR_HTTP_VERSION},
  {"scheme", VAR_SCHEME},
  {"stdout", VAR_STDOUT},
  {"stderr", VAR_STDERR},
  {NULL, VAR_NONE}
};

@@ -320,6 +324,12 @@ void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
                   curl_easy_getinfo(curl, CURLINFO_SCHEME,
                                     &stringp))
                  fprintf(stream, "%s", stringp);
                /* FALLTHROUGH */
              case VAR_STDOUT:
                stream = stdout;
                break;
              case VAR_STDERR:
                stream = stderr;
                break;
              default:
                break;
+1 −1
Original line number Diff line number Diff line
@@ -166,7 +166,7 @@ test1424 test1425 test1426 test1427 \
test1428 test1429 test1430 test1431 test1432 test1433 test1434 test1435 \
test1436 test1437 test1438 test1439 test1440 test1441 test1442 test1443 \
test1444 test1445 test1446 test1447 test1448 test1449 test1450 test1451 \
test1452 test1453 test1454 test1455 test1456 \
test1452 test1453 test1454 test1455 test1456 test1457 \
test1500 test1501 test1502 test1503 test1504 test1505 test1506 test1507 \
test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
test1516 test1517 \

tests/data/test1457

0 → 100644
+62 −0
Original line number Diff line number Diff line
<testcase>
<info>
<keywords>
protocol
--write-out
</keywords>
</info>
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 9
Connection: close
Content-Type: text/plain

testdata
</data>

</reply>

# Client-side
<client>
<server>
http
</server>

<name>
Check if %{stderr} and %{stdout} switch between stdout and stderr.
</name>
<command>
http://%HOSTIP:%HTTPPORT/1457 --write-out 'line1%{stderr}line2%{stdout}line3'
</command>
</client>

# Verify data
<verify>
<stdout nonewline="yes">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 9
Connection: close
Content-Type: text/plain

testdata
line1line3
</stdout>
#note: as of now <stderr> doesn't actually exist in runtests.pl
<stderr nonewline="yes">
line2
</stderr>
<protocol>
GET /1457 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

</protocol>
<strip>
^User-Agent:.*
</strip>
</verify>
</testcase>