使用HttpClient时,尝试通过HTTPS进行通信时收到以下错误:
线程"main"中的异常javax.net.ssl.SSLPeerUnverifiedException:peer未经过身份验证.
这是我的代码:
URI loginUri = new URI("https://myUrl.asp");
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet( loginUri );
HttpResponse response = httpclient.execute( httpget );
Run Code Online (Sandbox Code Playgroud)
如何抑制或删除此错误?
更新:不应再向阅读此内容的任何人推荐此问题及其答案.Android不再推荐使用HttpClient(读取:弃用),而是推荐使用HttpUrlConnection.现在使用的库的一个很好的例子是Retrofit和OkHttp.在此问题的上下文中,可以使用后续查询保存,存储和传递cookie.这不是透明处理的.使用OkHttp,您可以使用拦截器.
我有一个具有多个意图的Android应用程序.
第一个意图是登录表单,后续意图依赖于登录过程提供的cookie.
我遇到的问题是,cookie似乎并没有贯穿整个意图.我在每个意图中创建新的HttpClients(我最初尝试将Parcelable传输到每个意图,但效果不是很好).
有没有人有任何提示让饼干坚持意图?
我有一个URL,我正在使用HTTP GET将查询传递到页面.最新的味道(in net/http)会发生什么,该脚本不会超出302响应.我尝试了几种不同的解决方案; HTTPClient,net/http,Rest-Client,Patron ......
我需要一种方法来继续到最后一页,以验证页面html上的属性标记.重定向是由于移动用户代理点击重定向到移动视图的页面,因此标题中的移动用户代理.这是我今天的代码:
require 'uri'
require 'net/http'
class Check_Get_Page
def more_http
url = URI.parse('my_url')
req, data = Net::HTTP::Get.new(url.path, {
'User-Agent' => 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5'
})
res = Net::HTTP.start(url.host, url.port) {|http|
http.request(req)
}
cookie = res.response['set-cookie']
puts 'Body = ' + res.body
puts 'Message = ' + res.message
puts 'Code = ' + res.code
puts "Cookie \n" + cookie
end
end …Run Code Online (Sandbox Code Playgroud) 我对包装感到困惑HttpClient.之前它被分发为Microsoft.Http.NetNuGet包的一部分,而System.Net.Http被认为是遗留的.现在看起来恰恰相反:System.Net.Http所有平台Microsoft.Net.Http都有一个全新的软件包,并且暂时没有更新,据微软开发团队的人员称,将被弃用.
那么问题:
Microsoft.Net.Http用(最新的)替换NuGet包的依赖项System.Net.Http吗?Microsoft.Net.Http?那么非Windows平台(iOS,Android)呢?新的System.Net.Http支持他们,但我记得Microsoft.Net.Http我只好另外安装Microsoft.Bcl.Build,并Microsoft.Bcl以获得跨平台的东西的工作.System.Net.Http不依赖于他们.可以跳过Bcl包吗?System.Net.Http缺少一些Http扩展方法,SupportsPreAuthenticate并试图调用这些方法导致运行时错误(缺少方法).我们该如何应对?我正在进行HTTP呼叫.我的响应X-BB-SESSION在HttpResponseMessage对象的标题部分中包含会话代码.如何获取特定标头值?
我正在使用foreach语句迭代所有标头(MSDN链接).但是编译器一直说不能这样做:
foreach statement cannot operate on variables of type
System.net.http.headers.cachecontrolheadervalue because
'System.net.http.headers.cachecontrolheadervalue' doesn't contain
a public definition for 'GetEnumerator'
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试的代码:
//Connection code to BaasBox
HttpResponseMessage response = await client.SendAsync(requestMessage, HttpCompletionOption.ResponseHeadersRead);
if (response.IsSuccessStatusCode)
{
//get the headers
HttpResponseHeaders responseHeadersCollection = response.Headers;
foreach (var value in responseHeadersCollection.CacheControl) --> HERE
{
string sTemp = String.Format("CacheControl {0}={1}", value.Name, value.Value);
} else
{
Console.WriteLine("X-BB-SESSION: NOT Found");
}
Run Code Online (Sandbox Code Playgroud)
从我试图获取值(X-BB-SESSION值)的标题内容是这样的:
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Requested-With
X-BB-SESSION: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Run Code Online (Sandbox Code Playgroud) 我正在编写一个Android应用程序的代码,该应用程序应该获取数据,将其打包为Json并将其发布到Web服务器,而后者应该使用json进行响应.
使用GET请求工作正常,但由于某些原因使用POST,所有数据似乎都被剥离,服务器没有收到任何内容.
这是代码的片段:
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(params, 5000);
HttpConnectionParams.setSoTimeout(params, 5000);
DefaultHttpClient httpClient = new DefaultHttpClient(params);
BasicCookieStore cookieStore = new BasicCookieStore();
httpClient.setCookieStore(cookieStore);
String uri = JSON_ADDRESS;
String result = "";
String username = "user";
String apikey = "something";
String contentType = "application/json";
JSONObject jsonObj = new JSONObject();
try {
jsonObj.put("username", username);
jsonObj.put("apikey", apikey);
} catch (JSONException e) {
Log.e(TAG, "JSONException: " + e);
}
HttpPost httpPost = new HttpPost(uri);
List<NameValuePair> postParams = new ArrayList<NameValuePair>();
postParams.add(new BasicNameValuePair("json", jsonObj.toString()));
HttpGet httpGet …Run Code Online (Sandbox Code Playgroud) 我有以下方法返回Http status code给定的Url:
public static async void makeRequest(int row, string url)
{
string result;
Stopwatch sw = new Stopwatch(); sw.Start();
try
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = new HttpResponseMessage();
response = await client.GetAsync(url);
// dump contents of header
Console.WriteLine(response.Headers.ToString());
if (response.IsSuccessStatusCode)
{
result = ((int)response.StatusCode).ToString();
}
else
{
result = ((int)response.StatusCode).ToString();
}
}
}
catch (HttpRequestException hre)
{
result = "Server unreachable";
}
sw.Stop();
long time = sw.ElapsedTicks / (Stopwatch.Frequency / …Run Code Online (Sandbox Code Playgroud) 使用Apache的commons-httpclient for Java,将查询参数添加到GetMethod实例的最佳方法是什么?如果我使用PostMethod,它非常简单:
PostMethod method = new PostMethod();
method.addParameter("key", "value");
Run Code Online (Sandbox Code Playgroud)
但是,GetMethod没有"addParameter"方法.我发现这有效:
GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString(new NameValuePair[] {
new NameValuePair("key", "value")
});
Run Code Online (Sandbox Code Playgroud)
但是,我见过的大多数示例都是将参数直接硬编码到URL中,例如:
GetMethod method = new GetMethod("http://www.example.com/page?key=value");
Run Code Online (Sandbox Code Playgroud)
或者对查询字符串进行硬编码,例如:
GetMethod method = new GetMethod("http://www.example.com/page");
method.setQueryString("?key=value");
Run Code Online (Sandbox Code Playgroud)
这些模式中的一种是首选吗?为什么PostMethod和GetMethod之间的API差异?那些用于其他HttpMethodParams方法的是什么?
我目前正在使用System.Net.Http.HttpClient进行跨平台支持.
我读到,为每个请求实例化HttpClient对象并不是一个好习惯,并且应尽可能重用它.
现在我在为服务编写客户端库时遇到问题.某些API调用需要具有特定标头,有些必须不包含此特定标头.
似乎我只能操纵将随每个请求发送的"DefaultRequestHeaders".
实际发出请求时是否有一个选项,例如"client.PostAsync()"来修改仅针对特定请求的标头?
(信息:请求可以是多线程的).
提前致谢!
所以,我创建了一个HttpClient并使用发布数据HttpClient.PostAsync().
我设置了HttpContent使用
HttpContent content = new FormUrlEncodedContent(post_parameters); 其中post_parameters是键值对列表List<KeyValuePair<string, string>>
问题是,当HttpContent有一个很大的值(一个图像转换为base64要传输)我得到一个URL太长的错误.这是有道理的 - 因为网址不能超过32,000个字符.但是如何将数据添加到HttpContentif中呢?
请帮忙.