Nothing
context("Posting data")
h <- new_handle()
test_that("Post text data", {
handle_setopt(h, COPYPOSTFIELDS = "moo=moomooo");
handle_setheaders(h,
"Content-Type" = "text/moo",
"Cache-Control" = "no-cache",
"User-Agent" = "A cow"
)
req <- curl_fetch_memory(httpbin("post"), handle = h)
res <- jsonlite::fromJSON(rawToChar(req$content))
expect_equal(res$data, "moo=moomooo")
expect_equal(res$headers$`Content-Type`, "text/moo")
expect_equal(res$headers$`User-Agent`, "A cow")
# Using connection interface
input <- jsonlite::fromJSON(rawToChar(req$content))
con <- curl(httpbin("post"), handle = h)
output <- jsonlite::fromJSON(con)
expect_equal(input, output)
# Using download interface
tmp <- tempfile()
on.exit(unlink(tmp), add = TRUE)
curl_download(httpbin("post"), tmp, handle = h)
txt2 <- readLines(tmp)
expect_equal(rawToChar(req$content), paste0(txt2, "\n", collapse=""))
})
test_that("Change headers", {
# Default to application/url-encoded
handle_setheaders(h, "User-Agent" = "Not a cow")
req <- curl_fetch_memory(httpbin("post"), handle = h)
res <- jsonlite::fromJSON(rawToChar(req$content))
expect_equal(res$form$moo, "moomooo")
expect_equal(res$headers$`User-Agent`, "Not a cow")
})
test_that("Post JSON data", {
hx <- new_handle()
handle_setopt(hx, COPYPOSTFIELDS = jsonlite::toJSON(mtcars));
handle_setheaders(hx, "Content-Type" = "application/json")
req <- curl_fetch_memory(httpbin("post"), handle = hx)
expect_equal(req$status_code, 200)
# For debugging
if(req$status_code > 200)
stop(rawToChar(req$content))
# Note that httpbin reoders columns alphabetically
output <- jsonlite::fromJSON(rawToChar(req$content))
expect_is(output$json, "data.frame")
expect_equal(sort(names(output$json)), sort(names(mtcars)))
})
test_that("Multipart form post", {
# Don't reset options manually, curl should figure this out.
hx <- handle_setform(new_handle(),
foo = "blabla",
bar = charToRaw("boeboe"),
iris = form_data(serialize(iris, NULL), "data/rda"),
description = form_file(system.file("DESCRIPTION")),
logo = form_file(file.path(Sys.getenv("R_DOC_DIR"), "html/logo.jpg"), "image/jpeg")
)
req <- curl_fetch_memory(httpbin("post"), handle = hx)
# For debugging
expect_equal(req$status_code, 200)
if(req$status_code > 200)
stop(rawToChar(req$content))
res <- jsonlite::fromJSON(rawToChar(req$content))
expect_match(res$headers$`Content-Type`, "multipart")
expect_equal(sort(names(res$files)), c("description", "logo"))
expect_equal(sort(names(res$form)), c("bar", "foo", "iris"))
})
test_that("Empty values", {
hx <- handle_setform(new_handle())
req <- curl_fetch_memory(httpbin("post"), handle = hx)
expect_equal(req$status_code, 200)
res <- jsonlite::fromJSON(rawToChar(req$content))
expect_length(res$form, 0)
expect_equal(as.numeric(res$headers$`Content-Length`), 0)
hx <- handle_setform(new_handle(), x = "", y = raw(0))
req <- curl_fetch_memory(httpbin("post"), handle = hx)
# For debugging
expect_equal(req$status_code, 200)
if(req$status_code > 200)
stop(rawToChar(req$content))
res <- jsonlite::fromJSON(rawToChar(req$content))
expect_match(res$headers$`Content-Type`, "multipart")
expect_length(res$form, 2)
expect_equal(res$form$x, "")
expect_equal(res$form$y, "")
})
rm(h)
test_that("GC works", {
gc()
expect_equal(total_handles(), 0L)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.