微信小程序

小程序请求豆瓣API报403解决方法

昨天改了下小程序的后台,重启服务之后,发现豆瓣API返回403,应该是豆瓣对小程序的请求做了限制,不知道为啥要这样做,简直有毒。

解决方法

nginx做代理,并改变请求的Referer和User-Agent头部信息

location  /v2/ {
    proxy_store off;
    proxy_redirect off;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Referer 'no-referrer-when-downgrade';
    proxy_set_header User-Agent 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36';
    proxy_connect_timeout 600;
    proxy_read_timeout 600;
    proxy_send_timeout 600;
    proxy_pass https://api.douban.com/v2/;
}

亲测有效,nginx太强大,太好用了。

服务的配置文件

server {
listen 443;
ssl	on;
server_name liudongtushuguan.cn;
root /usr/share/nginx/html;
ssl_certificate /etc/nginx/1_www.liudongtushuguan.cn_bundle.crt;
ssl_certificate_key /etc/nginx/2_www.liudongtushuguan.cn.key;
ssl_session_timeout 10m;
include /etc/nginx/default.d/*.conf;

location / {
proxy_pass http://localhost:8080/;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}

location /dev/{
proxy_pass http://localhost:9300/;
}

location /v2/ {
proxy_store off;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Referer 'no-referrer-when-downgrade';
proxy_set_header User-Agent 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36';

proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_pass https://api.douban.com/v2/;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
 location / {
    proxy_pass http://localhost:8080/;
 }

必须要nginx监听443端口,然后转发请求到你自己的小程序服务,上面配置就是转到8080端口。
配置完之后,请求豆瓣的api的url应该变为http://hostname/v2/.... 。
就是在原来请求豆瓣API的基础上将api.douban.com换为你自己的域名。
举个栗子,根据isbn号查询图书信息,我的请求是这样的,https://myhostname/v2/book/isbn/9787544270878