当前位置: 首页 > 知识库问答 >
问题:

使用RestTemplate时获取异常消息“HTTP协议不受支持”

贺福
2023-03-14

我正在尝试使用RESTTemplate使用GET请求命中URL。它给出了一个异常,说明http协议不受支持。

我可以使用简单的旧HttpURLConnection方法访问endpoint来获得预期的响应。但是我无法使用rest模板这样做。我没有使用任何类型的VPN或代理,而尝试这一点。

下面是我正在使用的代码。我将用ip:port替换实际使用的ip和端口。

final String url = "http://ip:port/h2h.php?channelid=acrs&posid=1";
final HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_XML);
httpHeaders.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_XML_VALUE);
final HttpEntity<String> httpEntity = new HttpEntity<>("", httpHeaders)
restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://ip:port/h2h.php": http protocol is not supported; nested exception is org.apache.http.conn.UnsupportedSchemeException: http protocol is not supported
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:673) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:620) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:538) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.web.client.RestTemplate$$FastClassBySpringCGLIB$$aa4e9ed0.invoke(<generated>) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) ~[spring-core-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.cloud.netflix.metrics.RestTemplateUrlTemplateCapturingAspect.captureUrlTemplate(RestTemplateUrlTemplateCapturingAspect.java:33) ~[spring-cloud-netflix-core-1.4.3.RELEASE.jar:1.4.3.RELEASE]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673) ~[spring-aop-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at org.springframework.web.client.RestTemplate$$EnhancerBySpringCGLIB$$8fab6610.exchange(<generated>) ~[spring-web-4.3.13.RELEASE.jar:4.3.13.RELEASE]
    at com.gdn.x.pulsa.service.impl.TransactionServiceImpl.getTransactionResult(MobileTransactionServiceImpl.java:118) ~[classes/:na]

谢谢你。

编辑:使用HttpUrlConnection的代码

try {
      URL obj = new URL(url);
      HttpURLConnection con = (HttpURLConnection) obj.openConnection();
      con.setRequestMethod("GET");
      con.setRequestProperty("User-Agent", "Mozilla/5.0");
      int responseCode = con.getResponseCode();
      System.out.println("\nSending 'GET' request to URL : " + url);
      System.out.println("Response Code : " + responseCode);
      BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
      String inputLine;
      StringBuffer response = new StringBuffer();
      while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
      }
      in.close();
      System.out.println(response.toString());
    } catch (Exception e) {

    }

共有1个答案

谷梁镜
2023-03-14
try using a closebale httpclient 
   CloseableHttpClient httpClient = HttpClients.custom()
            .setSSLHostnameVerifier(new NoopHostnameVerifier())
            .build();
    HttpComponentsClientHttpRequestFactory requestFactory
            = new HttpComponentsClientHttpRequestFactory();
    requestFactory.setHttpClient(httpClient);

    ResponseEntity<String> response
            = new RestTemplate(requestFactory).exchange(
            url, HttpMethod.GET, httpEntity, String.class);
 类似资料:
  • 那么,为什么它要尝试将响应解析为JSON呢?我该如何解决呢? 谢谢!!

  • 问题内容: 我有通过执行PreparedStatement插入数据库表的JDBC代码。当我在内存中的HSQLDB数据库上运行代码时(作为JUnit测试的一部分),我得到一个SQLFeatureNotSupportedException信息,唯一的信息是消息“功能不受支持”和供应商代码-1500。我正在做的是基本插入到表中- 我无法想象最新的HSQLDB不支持此功能。 我的代码: 谁能说出问题所在或

  • 消息协议 节点之间通过消息来进行交互,所有消息都由下面的数据结构来实现。 message Message { enum Type { UNDEFINED = 0; DISC_HELLO = 1; DISC_DISCONNECT = 2; DISC_GET_PEERS = 3; DISC_PEERS = 4;

  • 我正在尝试做我的第一个不和谐的JDA机器人与Java。(我找到的StackOverflow的大部分教程和问题都使用了Javascript,所以我认为应该提到它)。 我无法收到任何我发送到#通用频道的消息。我按照本教程编写了代码,并试图用此链接中的代码修复问题。 JDA版本:4.2.0240 IntelliJ版本:2020.3.2 JDK 11.0.9 Java SE 8 我的类: 输出中的一个警告

  • HTTP协议是版本控制工具普遍采用的协议,具有安全(HTTPS),方便(跨越防火墙)等优点。Git在 1.6.6版本之前对HTTP协议支持有限,是哑协议,访问效率低,但是在1.6.6之后,通过一个CGI实现了智能的HTTP协议支持。 5.1.1. 哑传输协议 所谓的哑传输协议(dumb protocol)就是在Git服务器和Git客户端的会话过程中只使用了相关协议提供的基本传输功能,而未针对Git

  • Http 协议基本使用 在 SOFARPC (非SOFABoot 环境)中,当使用Http作为服务端协议的时候,支持Json作为序列化方式,作为一些基础的测试方式使用。 SOFARPC API 使用 发布服务 // 只有1个线程 执行 ServerConfig serverConfig = new ServerConfig() .setStopTimeout(60000) .setPort(12