Ruby ruby 模拟 http 请求 服务器端不能取得 header 的内容

goodboyRyan · 2013年04月26日 · 最后由 goodboyRyan 回复于 2013年04月27日 · 6609 次阅读

先看 ruby 代码 require "net/http" require "open-uri"
require "uri"

@agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31' data = {"m"=>"user", "a"= >"login", "release"=>"20110501", "appid"=>"3"};

uri = URI.parse("http://localhost:8080/server/uc.php") request = Net::HTTP.post_form(uri, data)

request.initialize_http_header({"USER-AGENT" => "asdsdsd"}) puts request.class puts request.body

服务器端: <?php header("Content-Type: text/html; charset=utf-8"); echo $_SERVER['HTTP_USER_AGENT']."\n"; ?>

返回的结果是: “Ruby”而不是 @agent的内容 难道是 initialize_http_header 方法的问题 求帮助?

initialize_http_header 放在 post_form 后面了自然收不到

response = Net::HTTP.post uri, data, {"USER-AGENT" => @agent}

#1 楼 @luikore 根据你的意思 搞定了 多谢

require "net/http" require "open-uri" require "uri"

@agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31' data = {"m"=>"user", "a" =>"login", "release"=>"20110501", "appid"=>"3"};

uri = URI.parse("http://localhost:8080/server/uc.php") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Post.new(uri.request_uri) request.set_form_data(data) request.initialize_http_header({"USER-AGENT" => @agent})

response = http.request(request) puts response.body

上面就是正确写法

需要 登录 后方可回复, 如果你还没有账号请 注册新账号