2013-06-29 36 views
16

Yêu cầu khởi tạo máy khách thông thường đến máy chủ nút được ghi lại tốt trong Fiddler. Tuy nhiên, các yêu cầu được gửi từ nút đến dịch vụ web không bị bắt. Nó không giúp chuyển cấu hình proxy (127.0.0.1:8888) sang phương thức yêu cầu. Làm thế nào tôi có thể định tuyến các tin nhắn yêu cầu thông qua Fiddler?Cách chụp thư http từ thư viện Yêu cầu Nút bằng Fiddler

var http = require('http'); 
var request = require('request'); 

request.get(webserviceURL, { "auth" : {"user": "user", "pass" = "pass", sendImmediately: true }, 
"proxy" : { "host" : "127.0.0.1", "port" : 8888 }}, 
function (error, response) { console.log("response received"); 
}); 

Yêu cầu repo: https://github.com/mikeal/request

+1

Đặt proxy trên đối tượng yêu cầu * phải * là tất cả những gì bạn cần làm, nhưng tôi không thấy thuộc tính "proxy" trong tài liệu? http://nodejs.org/api/http.html#http_http_request_options_callback – EricLaw

+0

Tôi đang sử dụng gói yêu cầu của bên thứ ba. Liên kết ở trong phần mô tả. – mupersan82

+0

Poking xung quanh trong nguồn, nó có vẻ ngụ ý rằng cú pháp sẽ là "tên máy chủ" chứ không phải là "máy chủ"? Hoặc bạn có thể định nghĩa proxy là chuỗi "http://127.0.0.1:8888" chứ không phải là một đối tượng? – EricLaw

Trả lời

21

Tôi chỉ cố gắng để làm điều này bản thân mình (sử dụng Fiddler và thư viện yêu cầu từ NPM). Dưới đây là cách tôi nhận được nó hoạt động:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = '0'; // Ignore 'UNABLE_TO_VERIFY_LEAF_SIGNATURE' authorization error 

// Issue the request 
request(
{ 
    method: "GET", 
    uri: "https://secure.somewebsite.com/", 
    proxy: "http://127.0.0.1:8888" // Note the fully-qualified path to Fiddler proxy. No "https" is required, even for https connections to outside. 
}, 
function(err, response, body) { 
    console.log("done"); 
}); 

Đây là với Fiddler2 sử dụng tùy chọn cổng và proxy mặc định (và không xác thực proxy).

+2

Cảm ơn rất nhiều. cài đặt NODE_TLS_REJECT_UNAUTHORIZED thực sự hữu ích. Nếu không có nó, yêu cầu https sẽ không hoạt động đối với tôi. Chỉ cần tò mò, biến môi trường này có ý nghĩa gì? – Habibi

+0

Tôi tin rằng nó cho phép Node sử dụng chứng chỉ SSL tự ký, thường sẽ là một nguy cơ bảo mật, nhưng trong trường hợp này đó là những gì bạn muốn :) – idolize

5

Fiddler hoạt động bằng cách thiết lập của bạn "Internet Options" (từ menu Start) "Connections"> "LAN Settings"> "Proxy Server" đến cảng của nó, do đó làm cho tất cả HTTP lưu lượng truy cập (các khách hàng tuân theo cài đặt này) đi qua nó.

Bạn nên chỉ định lib khách hàng node.js của mình để sử dụng proxy, cài đặt được viết trong hộp thoại tùy chọn đó sau khi bạn khởi động Fiddler.

+1

Đó không phải là những gì tôi đã làm? – mupersan82

+0

Bạn có chỉnh sửa câu hỏi của bạn hoặc tôi đã nhận được một BẤT ĐỘNG và bỏ lỡ một phần trong ví dụ mã của bạn? LOL – Poni

+1

Mặc dù proxy được đề cập ngầm định trong bài đăng đầu tiên, điều này đã giải quyết được vấn đề cho tôi bằng cách thu hút sự chú ý của tôi một cách rõ ràng hơn. Cảm ơn @poni. – sfuqua

4

Tùy chọn Proxy phải là một url đầy đủ, như thế này:

proxy : "http://127.0.0.1:8888" 
1

Để thực hiện điều này trên cơ sở đặc biệt, mà không thay đổi mã của bạn, bạn có thể sử dụng biến môi trường.

Yêu cầu khía cạnh:

  • http_proxy
  • https_proxy
  • no_proxy

Vì vậy, để proxy chỉ cần đặt chúng trong giao diện điều khiển của bạn trước khi chạy quá trình của bạn.

Ví dụ, để thiết lập http và https sử dụng proxy:

set HTTP_PROXY="http://127.0.0.1:8888" 
set HTTPS_PROXY="http://127.0.0.1:8888" 
set NODE_TLS_REJECT_UNAUTHORIZED=0 

Dòng thứ hai dừng lại vấn đề với SSL thông qua proxy cáy.

Các vấn đề liên quan