1
我尝试发送一个xml文件,在android中的http到一个rails服务器。从Android发送一个HTTP请求到一个rails服务器
我的Android发送码:
String link = "http://10.0.2.2:3000/export";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(link);
try {
String xmlFile = createXml(locationList);
StringEntity entity = new StringEntity(xmlFile, "UTF-8");
httppost.setEntity(entity);
httppost.addHeader("Content-Type", "application/xml");
HttpResponse response = httpclient.execute(httppost);
Log.d("response reason phrase", ""
+ response.getStatusLine().getReasonPhrase());
Log.d("response content", ""
+ response.getStatusLine().getStatusCode());
} catch (ClientProtocolException e) {
Log.d("exception", e.getMessage());
} catch (IOException e) {
Log.d("exception", e.getMessage());
}
在铁轨我创建了一个控制器的方法来监听输出 - 链接:
def export
begin
result = Net::HTTP.get(URI.parse("http://localhost:3000/export"))
MyLog.debug "#{result}"
xml_doc = Nokogiri::XML(result)
locations = xml_doc.xpath("//location")
if locations.count > 0
training = Training.create!
locations.each do |xml_location|
location = Location.new
location.latitude = xml_location.xpath("latitude").text
location.longitude = xml_location.xpath("longitude").text
location.training_id = training.id
location.save!
end
end
# end
rescue TimeoutError => e
MyLog.debug "timeout #{e}"
end
end
,我被迫创建export.html。 ERB,其中包含以下内容:
Nothing to see
我的routes.rb包含此:
match 'export' => 'Trainings#export', as: "export", :via => [:get, :post]
但是,如果我用我的应用程序立即请求到服务器,我看到在我的CMD如下:
Started POST "/export" for 127.0.0.1 at 2013-01-15 22:47:59 +0100
Connecting to database specified by database.yml
Processing by TrainingsController#export as HTML
Parameters: {"training"=>{"location"=>[{"longitude"=>"60.0",
"latitude"=>"60.0"}, {"longitude"=>"59.9999", "latitude"=>"60.0"},
{"longitude"=>"59.99995", "latitude"=>"59.9999"}]}}
WARNING: Can't verify CSRF token authenticity
Rendered trainings/export.html.erb within layouts/application (25.0ms)
Completed 200 OK in 61633ms (Views: 576.0ms | ActiveRecord: 0.0ms)
在此之后它不是更可能访问到我的服务器和我会看到在控制台始终如下:
Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-01-15 22:53:00 +0100
Served asset /jquery.js - 200 OK (76ms)
[2013-01-15 22:53:00] ERROR Errno::ECONNABORTED: Eine bestehende Verbindung wurd
e softwaregesteuertdurch den Hostcomputer abgebrochen.
C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:396:in `write'
C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:396:in `<<'
C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:396:in `_write_data'
C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:368:in `send_body_string'
C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:249:in `send_body'
C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpresponse.rb:152:in `send_response'
C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/httpserver.rb:110:in `run'
C:/Ruby/Ruby193/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
我的XML的解析是幸运的工作,因为我已经在复制方法创建的XML文件进行了测试,但希望你能帮助我理解我的问题:) 。我搜索了很多小时,但我没有,这帮助我解决了我的问题。