[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/plz a0a6d62335: Fix: (plz--sentinel) Skip HTTP redirect
|
From: |
ELPA Syncer |
|
Subject: |
[elpa] externals/plz a0a6d62335: Fix: (plz--sentinel) Skip HTTP redirect headers |
|
Date: |
Tue, 30 May 2023 03:58:57 -0400 (EDT) |
branch: externals/plz
commit a0a6d623352aa1caee722c16649190611a253cbc
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>
Fix: (plz--sentinel) Skip HTTP redirect headers
When using ":as 'response", we call curl with "--dump-header -" so we
can parse the headers of the response, but this causes curl to dump
the headers of any intermediate HTTP redirect responses as well, so
now we skip those headers.
---
README.org | 1 +
plz.el | 10 ++++++++++
plz.info | 29 +++++++++++++++--------------
tests/test-plz.el | 22 ++++++++++++++++++++++
4 files changed, 48 insertions(+), 14 deletions(-)
diff --git a/README.org b/README.org
index 2a486f0806..01f2faa1e6 100644
--- a/README.org
+++ b/README.org
@@ -184,6 +184,7 @@ You may also clear a queue with ~plz-clear~, which cancels
any active or queued
*Fixes*
+ Function ~plz~'s docstring now mentions that the ~:body~ argument may also
be a buffer (an intentional feature that was accidentally undocumented).
++ Handle HTTP 301 redirects when using ~:as 'response~.
** 0.5.4
diff --git a/plz.el b/plz.el
index c66f486e89..f746d6a45e 100644
--- a/plz.el
+++ b/plz.el
@@ -686,6 +686,7 @@ node `(elisp) Sentinels'). Kills the buffer before
returning."
;; Curl exited normally: check HTTP status code.
(goto-char (point-min))
(plz--skip-proxy-headers)
+ (while (plz--skip-redirect-headers))
(pcase (plz--http-status)
((and status (guard (<= 200 status 299)))
;; Any 2xx response is considered successful.
@@ -741,6 +742,15 @@ node `(elisp) Sentinels'). Kills the buffer before
returning."
(unless (re-search-forward "\r\n\r\n" nil t)
(signal 'plz-http-error '("plz--response: End of proxy headers not
found")))))))
+(defun plz--skip-redirect-headers ()
+ "Skip HTTP redirect headers in current buffer."
+ (when (and (looking-at plz-http-response-status-line-regexp)
+ (member (string-to-number (match-string 2)) '(301 302 307 308)))
+ ;; Skip redirect headers ("--dump-header" forces redirect headers to be
included
+ ;; even when used with "--location").
+ (unless (re-search-forward "\r\n\r\n" nil t)
+ (signal 'plz-http-error '("plz--response: End of redirect headers not
found")))))
+
(cl-defun plz--response (&key (decode-p t))
"Return response structure for HTTP response in current buffer.
When DECODE-P is non-nil, decode the response body automatically
diff --git a/plz.info b/plz.info
index 357e1c98a9..188f54f350 100644
--- a/plz.info
+++ b/plz.info
@@ -307,6 +307,7 @@ File: README.info, Node: 06-pre, Next: 054, Up: Changelog
• Function ‘plz’’s docstring now mentions that the ‘:body’ argument
may also be a buffer (an intentional feature that was accidentally
undocumented).
+ • Handle HTTP 301 redirects when using ‘:as 'response’.
File: README.info, Node: 054, Next: 053, Prev: 06-pre, Up: Changelog
@@ -493,20 +494,20 @@ Node: Queueing6848
Node: Tips8106
Node: Changelog8407
Node: 06-pre8665
-Node: 0549212
-Node: 0539459
-Node: 0529775
-Node: 0519982
-Node: 0510234
-Node: 0410440
-Node: 0311346
-Node: 02111794
-Node: 0211943
-Node: 0112074
-Node: Credits12170
-Node: Development12536
-Node: Copyright assignment13050
-Node: License13638
+Node: 0549277
+Node: 0539524
+Node: 0529840
+Node: 05110047
+Node: 0510299
+Node: 0410505
+Node: 0311411
+Node: 02111859
+Node: 0212008
+Node: 0112139
+Node: Credits12235
+Node: Development12601
+Node: Copyright assignment13115
+Node: License13703
End Tag Table
diff --git a/tests/test-plz.el b/tests/test-plz.el
index f78f6e4417..5c3facc9ed 100644
--- a/tests/test-plz.el
+++ b/tests/test-plz.el
@@ -352,6 +352,28 @@
(plz-deftest plz-500-errors ()
(should-error (plz 'get "https://httpbin.org/status/500")))
+;;;;; Redirects
+
+(plz-deftest plz-301-redirects ()
+ (plz-test-get-response
+ (plz 'get
"https://httpbin.org/redirect-to?url=https%3A%2F%2Fhttpbin.org/get&status_code=301"
+ :as 'response :then 'sync)))
+
+(plz-deftest plz-302-redirects ()
+ (plz-test-get-response
+ (plz 'get
"https://httpbin.org/redirect-to?url=https%3A%2F%2Fhttpbin.org/get&status_code=302"
+ :as 'response :then 'sync)))
+
+(plz-deftest plz-307-redirects ()
+ (plz-test-get-response
+ (plz 'get
"https://httpbin.org/redirect-to?url=https%3A%2F%2Fhttpbin.org/get&status_code=307"
+ :as 'response :then 'sync)))
+
+(plz-deftest plz-308-redirects ()
+ (plz-test-get-response
+ (plz 'get
"https://httpbin.org/redirect-to?url=https%3A%2F%2Fhttpbin.org/get&status_code=308"
+ :as 'response :then 'sync)))
+
;;;;; Errors
(plz-deftest plz-get-curl-error nil
| [Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/plz a0a6d62335: Fix: (plz--sentinel) Skip HTTP redirect headers,
ELPA Syncer <=