Issue #12375 has been updated by Shugo Maeda.


Shugo Maeda wrote:
> > > * The first argument must be a URI object, but it might be better to accept a String.
> > 
> > It should accept the hostname and the path parameters, like Net::HTTP.get.
> 
> Ah, I forgot to consider consistency with Net::HTTP.get.

After contemplation, I think Net::HTTP.post shouldn't accept the hostname, path,
and port parameters.

These parameters are useless because they can't support HTTPS, and adding optional
parameters is confusing because Net::HTTP.post needs to accept the mandatory request body
and the optional request header as its parameters.

The hostname, path, and port parameters of Net::HTTP.get might also have to be deprecated,
but it's a different issue.

> I've attached a patch, but there are some considerations:

My thoughts about these considerations are:

> * Net::HTTP.post_form supports basic authentication by userinfo in URLs, but Net::HTTP.post doesn't, because it's deprecated by RFC3986. Is it OK?

I think it's OK.

> * The first argument must be a URI object, but it might be better to accept a String.

A String object shouldn't be accepted as the first argument, because it's confusing with
the Net::HTTP.get-like hostname argument.

> * Should methods for other HTTP methods such as Net::HTTP.patch be added?

Such methods are not necessary because they are less popular than POST.
 

----------------------------------------
Feature #12375: Net::HTTP.post
https://bugs.ruby-lang.org/issues/12375#change-58855

* Author: Shugo Maeda
* Status: Open
* Priority: Normal
* Assignee: Yui NARUSE
----------------------------------------
Net::HTTP.post_form is convenient, but it's dedicated to application/x-www-form-urlencoded.
Why not provide Net::HTTP.post for other media types?

```
res = Net::HTTP.post(URI('http://www.example.com/api/search'),
                     { "q" => "ruby", "max" => "50" }.to_json,
                     "Content-Type" => "application/json")
```

I've attached a patch, but there are some considerations:

* Net::HTTP.post_form supports basic authentication by userinfo in URLs,
  but Net::HTTP.post doesn't, because it's deprecated by RFC3986.
  Is it OK?
* The first argument must be a URI object, but it might be better to accept a String.
* Should methods for other HTTP methods such as Net::HTTP.patch be added?


---Files--------------------------------
net_http_s_post.diff (1.76 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>