我遇到了如何测试镜像 API 订阅中解决的问题。
“我发现在本地进行开发的第二种也是最有用的方法是将订阅回调请求(例如来自可公开访问的服务器)捕获到日志中,然后使用 curl 在本地/开发机器上重现该请求”
有人可以解释如何做到这一点吗?
我遇到了如何测试镜像 API 订阅中解决的问题。
“我发现在本地进行开发的第二种也是最有用的方法是将订阅回调请求(例如来自可公开访问的服务器)捕获到日志中,然后使用 curl 在本地/开发机器上重现该请求”
有人可以解释如何做到这一点吗?
您执行此操作的具体方式取决于您的语言和平台,但其要点是您记录通知请求正文。
Java 快速入门实际上已经在[NotifyServlet.java][2]
. 它对请求正文进行一些快速检查并将其记录到 info.
public class NotifyServlet extends HttpServlet {
private static final Logger LOG = Logger.getLogger(MainServlet.class.getSimpleName());
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Respond with OK and status 200 in a timely fashion to prevent redelivery
response.setContentType("text/html");
Writer writer = response.getWriter();
writer.append("OK");
writer.close();
// Get the notification object from the request body (into a string so we
// can log it)
BufferedReader notificationReader =
new BufferedReader(new InputStreamReader(request.getInputStream()));
String notificationString = "";
// Count the lines as a very basic way to prevent Denial of Service attacks
int lines = 0;
while (notificationReader.ready()) {
notificationString += notificationReader.readLine();
lines++;
// No notification would ever be this long. Something is very wrong.
if(lines > 1000) {
throw new IOException("Attempted to parse notification payload that was unexpectedly long.");
}
}
LOG.info("got raw notification " + notificationString);
JsonFactory jsonFactory = new JacksonFactory();
...
运行此代码后,访问您的日志,复制 JSON 并将其与 curl 一起使用以将其发布回您的本地服务器。
一种可能的方法是使用诸如 之类的工具nc
,它可以让您在特定端口上侦听到该端口的所有流量并显示结果(或将其重定向到文件)。(您需要使用 https/http 代理,除非您擅长手动协商 SSL。)
在这种情况下,服务器将向您发送将显示的回调信息,您可以复制 JSON 并在本地使用它。