Apache HttpClient et des ports personnalisés
Je suis en utilisant Apache HttpClient 4 et il fonctionne très bien. La seule chose qui ne fonctionne pas est de ports personnalisés. Il semble que le répertoire racine est récupéré et le port est ignoré.
HttpPost post = new HttpPost("http://myserver.com:50000");
HttpResponse response = httpClient.execute(post);
Si aucun port n'est défini, de http et de https-connexions fonctionnent bien.
Le système de registre est définie comme suit:
final SchemeRegistry sr = new SchemeRegistry();
final Scheme http = new Scheme("http", 80,
PlainSocketFactory.getSocketFactory());
sr.register(http);
final SSLContext sc = SSLContext.getInstance(SSLSocketFactory.TLS);
sc.init(null, TRUST_MANAGER, new SecureRandom());
SSLContext.setDefault(sc);
final SSLSocketFactory sf = new SSLSocketFactory(sc,
SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
final Scheme https = new Scheme("https", 443, sf);
sr.register(https);
Comment puis-je définir des ports personnalisés pour une demande?
Quelle est la question?
Hum ... comment êtes-vous en supposant pour se connecter au port 50000, lors de vos prises de courant sont à l'écoute sur le port 80 et 443? Si ce n'est pas
J'ai aussi pensé comme ça, mais le schéma de port est seulement le standard lorsque aucun port n'est donné. Si un port qui a été explicitement définie, que le port sera utilisé à la place du schéma de port.
Je suis en cours d'exécution dans le même numéro du client de ne pas être en mesure de gérer des ports personnalisés. Pourriez-vous nous donner un exemple de la façon dont vous avez utilisé le ByteArrayEntity ?
Hum ... comment êtes-vous en supposant pour se connecter au port 50000, lors de vos prises de courant sont à l'écoute sur le port 80 et 443? Si ce n'est pas
final Scheme http = new Scheme("http", 50000, PlainSocketFactory.getSocketFactory());
?J'ai aussi pensé comme ça, mais le schéma de port est seulement le standard lorsque aucun port n'est donné. Si un port qui a été explicitement définie, que le port sera utilisé à la place du schéma de port.
Je suis en cours d'exécution dans le même numéro du client de ne pas être en mesure de gérer des ports personnalisés. Pourriez-vous nous donner un exemple de la façon dont vous avez utilisé le ByteArrayEntity ?
OriginalL'auteur Stephan | 2011-10-10
Vous devez vous connecter pour publier un commentaire.
Une suggestion est d'essayer en utilisant
HttpPost(URI address)
à la place de celui avecString
paramètre. Vous pouvez définir explicitement le port:Ne peut pas garantir que cela fonctionne, mais lui donner un essai.
Si vous avez des "400 bad request", cela signifie que vous sont en fait de la connexion au serveur, l'envoi de la demande et l'obtention de la réponse. Vérifier vos journaux de serveur pour voir ce que le problème peut être.
Eh bien, cela a fonctionné.
Comme cette manière de construire
httpHost
. Il sépare l'hôte et une adresse url complète peut être obtenue commeuri.toURL().toString()
. De plus, il rend URL interpolation correcte danshttpClient.execute(httpHost, httpRequest, handler, context)
.OriginalL'auteur Aleks G
Le problème est que le serveur ne comprend pas HTTP 1.1 chunked transferts. J'en cache les données à l'aide d'un ByteArrayEntity et tout était ok.
Donc la coutume ports fonctionnent avec le code mentionné ci-dessus.
OriginalL'auteur Stephan
Une autre approche consiste à configurer
httpClient
d'utiliser unSchemaPortResolver
.De cette façon, vous éviter des problèmes de l'aide d'une Chaîne de construire un
HttpPost
et de l'appel dehttpClient.execute(host, httpPost, handler, context)
, seulement de trouver votre port est ajouté après le chemin, comme:http://localhost/api:8080
, ce qui est faux.OriginalL'auteur WesternGun