这是情况: 他们是在Servoy中的外部Web服务,我想在ASP.NET MVC应用程序中使用这个服务。 有了这个代码,我试图从服务中获取数据: HttpResponseMessage resp = client.GetAsync("http://localhost:8080/servoy-service/iTechWebService/axws/shop/_authenticate/mp/112818142456/82cf1988197027955a679467c309274c4b").Result; resp.EnsureSuccessStatusCode(); var foo = resp.Content.ReadAsAsync<string>().Result; 但是当我运行应用程序,我得到了下一个错误: 没有MediaTypeFormatter可用于从媒体types为“text / plain”的内容读取“String”types的对象。 如果我打开Fiddler并运行相同的URL,我看到正确的数据,但内容types是文本/纯文本。 然而,我看到在提琴手也JSON我想… 有没有可能在客户端解决这个问题呢,还是Servoy的web服务? 更新: 使用HttpWebRequest而不是HttpResponseMessage并使用StreamReader读取响应…
更新:这个问题及其答案不应该再推荐给任何读这个的人。 Android不再推荐HttpClient(阅读:弃用),而是build议HttpUrlConnection 。 现在使用库的一个很好的例子是Retrofit和OkHttp 。 在这个问题的上下文中,cookie可以被保存,存储并随后进行查询。 这不是透明地处理的。 用OkHttp你可以使用拦截器 。 我有一个Android应用程序有多个意图。 第一个意图是login表单,随后的意图依赖于login过程中提供的cookie。 我遇到的问题是,Cookie似乎并没有坚持到目标为止。 我在每个意图创build新的HttpClient(我最初尝试Parcelable传输到每个意图,这并没有很好地工作)。 有没有人有任何提示使cookie在整个意图中持续存在?
API我试图调用要求我做一个POST,但有一个空的身体。 我是新来的使用WCF Web API HttpClient,我似乎无法find将执行职位空的职位的写入代码。 我find一些HttpContent.CreateEmpty()方法的引用,但我不认为这是Web API的HttpClient代码,因为我似乎无法find该方法。
我从Nuget得到了这个 HttpClient。 当我想要获取数据时,我这样做: var response = await httpClient.GetAsync(url); var data = await response.Content.ReadAsStringAsync(); 但问题是我不知道如何发布数据? 我必须发送一个post请求并发送这些值: comment="hello world"和questionId = 1 。 这些可以是一个类的属性,我不知道。 更新我不知道如何将这些值添加到HttpContent作为后期方法需要它。 httClient.Post(string, HttpContent);
我正在尝试在Java中发布一些JSON数据,以供我正在使用的Android应用程序使用。 下面是有效的,还是我需要以不同的方式推送JSONstring? HttpPost httpost = new HttpPost("http://test.localhost"); httpost.setEntity(new StringEntity("{\"filters\":true}")); httpost.setHeader("Accept", "application/json"); httpost.setHeader("Content-type", "application/x-www-form-urlencoded; charset=UTF-8"); //… other java code to execute the apache httpclient 先谢谢你
更新:自己find答案,见下面:-) 嗨, 我目前正在编写一个Android应用程序,使用HTTP Post和AsyncTask在后台提交内容。 我为此使用org.apache.http.client包。 我基于这个例子我的代码。 基本上,我的代码如下所示: public void postData() { // Create a new HttpClient and Post Header HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://192.168.1.137:8880/form"); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("id", "12345")); nameValuePairs.add(new BasicNameValuePair("stringdata", "AndDev is Cool!")); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); // Execute HTTP Post Request HttpResponse response = httpclient.execute(httppost); […]
import java.awt.List; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.InputStreamReader; import java.util.ArrayList; import javax.imageio.ImageIO; import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.omg.DynamicAny.NameValuePair; public class Upload { public static void main (String[] args) { System.out.println(Imgur("C:\\Users\\username\\Desktop\\image.jpg", "clientID")); } public static String Imgur (String imageDir, String clientID) { […]
我有相当简单的HttpClient 4代码调用HttpGet来获取HTML输出。 HTML返回的脚本和图像位置都设置为本地(例如<img src="http://img.dovov.comfoo.jpg"/> ),所以我需要调用URL来使这些变为绝对的( <img src="http://foo.comhttp://img.dovov.comfoo.jpg"/> )现在出现这个问题 – 在调用期间,可能会有一两个302redirect,所以原始URL不再反映HTML的位置。 给出所有可能(或不可以)redirect的返回内容的最新URL。 我看着HttpGet#getAllHeaders()和HttpResponse#getAllHeaders() – 找不到任何东西。 编辑: HttpGet#getURI()返回原始的调用地址
我有以下testing代码。 循环316934或361992次后,我总是得到“任务被取消”错误。 如果我没有错,有两个可能的原因为什么取消任务a)HttpClient超时或b)队列中的任务太多,有些任务超时。 我找不到排队任务的限制文档。 我试图创build超过500K的任务,并没有超时。 我猜“b”的原因可能不对。 Q1。 还有其他的原因,我错过了吗? Q2。 如果是因为HttpClient超时,我怎么才能得到确切的exception消息,而不是“TaskCancellation”exception。 Q3。 什么是解决这个问题的最好方法? 我应该介绍一下节stream器吗? 谢谢! var _httpClient = new HttpClient(); _httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml"); _httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate"); _httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0"); _httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1"); int[] intArray = Enumerable.Range(0, 600000).ToArray(); var results = intArray .Select(async t => { using (HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "http://www.google.com")) […]
有没有一种更简单的方法来设置HTTP客户端抢先基本authentication比这里描述的? 在以前的版本(3.x)中,它曾经是一个简单的方法调用(例如, httpClient.getParams().setAuthenticationPreemptive(true) )。 我想避免的主要事情是将BasicHttpContext添加到我执行的每个方法。