国内直接调用chatGpt已经被禁,想要在本地代码中调用需要配置本地代理服务:
引入okhttp jar包
<groupId>io.github.openfeign</groupId>
<artifactId>feign-okhttp</artifactId>
<version>10.2.0</version>
增加代理配置文件
@Configuration
//配置openfein接口的文件件路径
@EnableFeignClients(basePackages = "*")
public class FeignConfig
{
// 本地代理的ip,port,需要代理的域名可以通过配置文件配置,此处省略该操作
private static List<String> domainList = Arrays.asList(new String[] {"api.openai.com"});
@Bean
public OkHttpClientFactory okHttpClientFactory(OkHttpClient.Builder builder) {
return new ProxyOkHttpClientFactory(builder);
}
static class ProxyOkHttpClientFactory extends DefaultOkHttpClientFactory {
public ProxyOkHttpClientFactory(OkHttpClient.Builder builder) {
super(builder);
// 配置IP、端口
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 10809));
List<Proxy> proxyList = new ArrayList<>(1);
proxyList.add(proxy);
builder.proxySelector(new ProxySelector() {
@Override
public List<Proxy> select(URI uri) {
if (uri == null || !domainList.contains(uri.getHost())) {
return Collections.singletonList(Proxy.NO_PROXY);
}
return proxyList;
}
@Override
public void connectFailed(URI uri, SocketAddress sa, IOException ioe) {
}
});
}
}
}``
ps 本地代理服务器获取:需要开启本地翻墙,在网络设置中找到代理,确定代理的ip和端口
FAQ
远程服务调用使用的是openfeign,刚开始选择的feign-okhttp 版本是9.0.0,调用接口的返回值一直报Caused by: java.lang.NoSuchMethodError: feign.Response.create(ILjava/lang/String;Ljava/util/Map;Lfeign/Response$Body;)Lfeign/Response;
期间在网上查找的方法都无法解决问题,查看源码,这个错误的原因是okhttp包中的Response调用的是feign-core包中类,该Response类中没有create方法
将feign-okhttp 版本升级为10.2.0 调增了Response创建的方式,解决了无法创建的问题: