java 通过本地代理调用 chatGpt

618 阅读1分钟

国内直接调用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和端口

image.png

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;

image.png 期间在网上查找的方法都无法解决问题,查看源码,这个错误的原因是okhttp包中的Response调用的是feign-core包中类,该Response类中没有create方法

image.png

将feign-okhttp 版本升级为10.2.0 调增了Response创建的方式,解决了无法创建的问题:

image.png