From 4c9db2861c3fe78c7a032bfdcc7c655776e7489b Mon Sep 17 00:00:00 2001 From: "antoine.lizee" Date: Sun, 10 Apr 2016 12:42:25 -0700 Subject: [PATCH 1/2] enh: use the appropriate CURL options for specifying get, put and post methods --- R/request.R | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/R/request.R b/R/request.R index d771ce0e..29fa07ef 100644 --- a/R/request.R +++ b/R/request.R @@ -99,7 +99,14 @@ print.request <- function(x, ...) { request_prepare <- function(req) { req <- request_combine(request_default(), req) - req$options$customrequest <- req$method + switch(req$method, + "POST" = { + req$options$post <- TRUE}, + "PUT" = { + req$options$put <- TRUE}, + "GET" = { + req$options$httpget <- TRUE}, + {req$options$customrequest <- req$method}) # Sign request, if needed token <- req$auth_token From 7cd10efd5d218dd54ad20296e570738cab90368b Mon Sep 17 00:00:00 2001 From: "antoine.lizee" Date: Sat, 21 May 2016 12:55:15 +0200 Subject: [PATCH 2/2] enh: NEWS + comments --- NEWS.md | 4 ++++ R/request.R | 12 ++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/NEWS.md b/NEWS.md index dbd815fe..9708f68d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,9 @@ # httr 1.1.0.9000 +* Don't use custom requests anymore for standard `POST`, `GET` and `PUT` requests + (issue #356, fix #357). This has the side-effect of properly following redirects + after `POST`, fixing usual login issues (eg hadley/rvest#133). + * New `http_type()` returns the content/mime type of a request, sans parameters. * Fix in readfunction to close connection when done. diff --git a/R/request.R b/R/request.R index 29fa07ef..e86518a3 100644 --- a/R/request.R +++ b/R/request.R @@ -99,13 +99,13 @@ print.request <- function(x, ...) { request_prepare <- function(req) { req <- request_combine(request_default(), req) + + # Use the appropriate cURL method when available. + # This - among others - ensures proper behaviour on redirects. switch(req$method, - "POST" = { - req$options$post <- TRUE}, - "PUT" = { - req$options$put <- TRUE}, - "GET" = { - req$options$httpget <- TRUE}, + "POST" = {req$options$post <- TRUE}, + "PUT" = {req$options$put <- TRUE}, + "GET" = {req$options$httpget <- TRUE}, {req$options$customrequest <- req$method}) # Sign request, if needed