对于我目前的应用程序,我从西班牙的不同"活动提供商"收集图像.
Bitmap bmp=null;
HttpGet httpRequest = new HttpGet(strURL);
long t = System.currentTimeMillis();
HttpResponse response = (HttpResponse) httpclient.execute(httpRequest);
Log.i(TAG, "Image ["+ strURL + "] fetched in [" + (System.currentTimeMillis()-t) + "ms]");
HttpEntity entity = response.getEntity();
InputStream instream = entity.getContent();
bmp = BitmapFactory.decodeStream(instream);
return bmp;
Run Code Online (Sandbox Code Playgroud)
但是,从salir.com下载图像时,我得到以下logcat输出:
13970 Gallery_Activity I Fetching image 2/8 URL: http://media.salir.com/_images_/verticales/a/0/1/0/2540-los_inmortales_la_trattoria-marc_aureli_27_29_no.jpg
13970 ServiceHttpRequest I Image [http://media.salir.com/_images_/verticales/a/0/1/0/2540-los_inmortales_la_trattoria-marc_aureli_27_29_no.jpg] fetched in [146ms]
13970 skia D --- decoder->decode returned false
Run Code Online (Sandbox Code Playgroud)
搜索该错误消息没有提供太多有用的结果.
谁知道问题可能是什么?
格拉西亚斯!
更新1:
在查询了更多并测试不同的东西后,我发现问题似乎在于其他地方.即使我的logcat输出说
13970 ServiceHttpRequest I Image [http://media.salir.com/_images_/verticales/a/0/1/0/2540-los_inmortales_la_trattoria-marc_aureli_27_29_no.jpg] fetched in [146ms] …Run Code Online (Sandbox Code Playgroud) 我试图从HttpClient 4.0.1运行一个示例应用程序.它是示例部分中的ClientMultiThreadedExecution.java文件.我把在classpath这些文件:apache-mime4j-0.6.jar; commons-codec-1.3.jar; commons-logging-1.1.1.jar; httpclient-4.0.1.jar; httpcore-4.0.1.jar; httpmime-4.0.1.jar并且文件正确编译.在运行时,我收到以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/client/methods/HttpUriRequest
Caused by: java.lang.ClassNotFoundException: org.apache.http.client.methods.HttpUriRequest
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Run Code Online (Sandbox Code Playgroud)
我错过了参考吗?这似乎是一个类路径错误,但我无法弄清楚要包含哪个jar文件?预先感谢您的帮助.
在我的代码中我有这个
Log.d("WFlog (executeRequest)", request.toString()) ;
httpResponse = client.execute(request);
Log.d("WFlog (execute)", request.toString()) ;
Run Code Online (Sandbox Code Playgroud)
使用Android 2.2运行应用程序运行正常,在logcat中我看到两个日志行.
现在使用HonyComb为相同的代码运行应用程序似乎我永远不会正确传递client.execute.我得到的最后一个日志行是"WFlog(executeRequest)".
在此之后,我看到以下内容:
01-27 21:54:45.169: WARN/System.err(390): android.os.NetworkOnMainThreadException
01-27 21:54:45.196: WARN/System.err(390): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1069)
01-27 21:54:45.196: WARN/System.err(390): at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:368)
01-27 21:54:45.205: WARN/System.err(390): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:208)
01-27 21:54:45.215: WARN/System.err(390): at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:431)
01-27 21:54:45.237: WARN/System.err(390): at java.net.Socket.connect(Socket.java:901)
Run Code Online (Sandbox Code Playgroud)
知道我应该寻找什么吗?
您好我使用Apache HTTP Client 4.0基于HTTPS协议上传服务器上的一些文件.上传的应用程序全天候运行.今天突然间它开始抛出这个例外 -
java.net.SocketException: No buffer space available (maximum connections reached?): connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:333)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:101)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:381)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
Run Code Online (Sandbox Code Playgroud)
谁能帮帮我吗?我对发生的事情完全无能为力?
这是上传文件的源代码 -
public File call() throws Exception {
HttpClient httpclient = new DefaultHttpClient();
try{
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
/*
* Create POST REQUEST
*/
HttpPost httpPost = new HttpPost(this.URL);
/* …Run Code Online (Sandbox Code Playgroud) Android SDK 4.0.3目前正在打包Apache的HttpClient 4.1.1库.我需要使用最新的HttpClient 4.1.3中的一些功能.
- 有没有办法可以更新我的SDK?
- 我在哪里可以知道未来的SDK中是否有计划打包更新的HttpClient?
- 有没有优雅的工作?(我已经尝试了httpclientandroidlib http://code.google.com/p/httpclientandroidlib - 但我想探索其他选项)
任何指针都赞赏.谢谢.
出于某种原因,我现在使用的下面的代码因此引发了一个异常:
public static async Task<string> HttpPut(string inUrl, string inFilePath)
{
using (var handler = new HttpClientHandler
{
AllowAutoRedirect = false
})
{
using (var client = new HttpClient(handler))
{
//var content = new StreamContent(new FileStream(inFilePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true));
using (var content = new StreamContent(new FileStream(inFilePath, FileMode.Open)))
{
content.Headers.Remove("Content-Type");
content.Headers.Add("Content-Type", "application/octet-stream");
using (var req = new HttpRequestMessage(HttpMethod.Put, inUrl))
{
string authInfo = String.Format("{0}:{1}", Program.Config.MediaStorageList.Find(o => o.Name == "Viz Media Engine Test").UserName, Program.Config.MediaStorageList.Find(o => o.Name == "Viz Media …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用http客户端使用PoolingClientConnectionManager为各个主机设置最大连接来命中服务器
//Code that inilizes my connection mananger and http client
Run Code Online (Sandbox Code Playgroud)
HttpParams httpParam = httpclient.getParams(); HttpConnectionParams.setSoTimeout(httpParam,SOCKET_TIMEOUT);
HttpConnectionParams.setConnectionTimeout(httpParam, CONN_TIMEOUT);
httpclient.setParams(httpParam);
//Run a thread which closes Expired connections
new ConnectionManager(connManager).start();
//Code that executes my request
HttpPost httpPost = new HttpPost(url);
HttpEntity httpEntity = new StringEntity(request, "UTF-8");
httpPost.setEntity(httpEntity);
Header acceptEncoding = new BasicHeader("Accept-Encoding", "gzip,deflate");
httpPost.setHeader(acceptEncoding);
if(contenttype != null && !contenttype.equals("")){
Header contentType = new BasicHeader("Content-Type", contenttype);
httpPost.setHeader(contentType);
}
InputStream inputStream = null;
LOG.info(dataSource + URL + url + REQUEST + request);
HttpResponse …Run Code Online (Sandbox Code Playgroud) 我希望按照json.net性能提示文档的建议使用流,但是我无法找到如何获取http状态代码而没有典型的等待HttpResponse.
是否有一种方法可以在不读取数据的情况下首先获取状态代码?所以仍然利用流?
我曾经在完整的.Net框架中使用此设置来处理我正在联系的服务器返回的一些不安全的标头.
<system.net>
<settings>
<httpWebRequest useUnsafeHeaderParsing="true" />
</settings>
<system.net>
Run Code Online (Sandbox Code Playgroud)
我真的找不到在.Net核心中做同样事情的方法.(控制台应用)
有帮助吗?
我正在.Net Core 2.1中创建一个应用程序,我正在使用http客户端进行Web请求.问题是我必须发送并行调用来节省时间,为此我使用的是Task.WhenAll()方法但是当我点击这个方法时,我得到错误"这个实例已经启动了一个或多个请求.属性只能被修改在发送第一个请求之前"以前我使用的是RestSharp,一切都很好,但我想使用httpclient.这是代码:
public async Task<User> AddUser(string email)
{
var url = "user/";
_client.BaseAddress = new Uri("https://myWeb.com/");
_client.DefaultRequestHeaders.Accept.Clear();
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(Constants."application/json"));
_client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
var json = new {email = email }
var response = await _client.PostAsJsonAsync(url,json);
if (response .IsSuccessStatusCode)
{ ....
Run Code Online (Sandbox Code Playgroud)
这是构造函数:
private readonly HttpClient _httpClient;
public UserRepository(HttpClient httpClient)
{
_httpClient = httpClient;
}
Run Code Online (Sandbox Code Playgroud)
方法调用:
var user1 = AddUser("user@user.com");
var user2 = AddUser("test@test.com");
await Task.WhenAll(user1, user2);
Run Code Online (Sandbox Code Playgroud)
这是启动配置:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Run Code Online (Sandbox Code Playgroud)
那么我做错了什么?我是否需要使用AddTransient()更改AddSingleton,还是有任何其他问题.还有一个问题我需要在响应之后使用_client.Dispose()因为我所遵循的教程没有使用dispose方法所以我对此感到困惑.
httpclient ×10
java ×4
android ×3
c# ×3
.net-core ×1
apache ×1
asp.net ×1
bugfender ×1
classpath ×1
connection ×1
http ×1
httpresponse ×1
json.net ×1
put ×1
sockets ×1
stream ×1
system.net ×1