LINUX.ORG.RU

История изменений

Исправление Zubok, (текущая версия) :

Почему тогда у тебя при let связывании (url-privacy-level '(agent)) работает как нужно

Сработало тогда только https, на самом деле. Я плохо поставил эксперимент. А через http не сработало.

У меня еще вот такой код нормально сработал:

У меня такой код не сработал на http и сработал на https. Я попробовал и example.com, и другие адреса. У меня версия здесь - гонки. В одном случае будет работать, а в другом не будет. Причем еще интересные эффекты возникают, если несколько одинаковых запросов друг за другом сделать: иногда срабатывает '(agent) и 'paranoid. Кусок исходного кода намекает на это:

	(let ((status (process-status connection)))
	  (cond
	   ((eq status 'connect)
	    ;; Asynchronous connection
	    (set-process-sentinel connection 'url-http-async-sentinel))
	   ((eq status 'failed)
	    ;; Asynchronous connection failed
	    (error "Could not create connection to %s:%d" host port))
	   (t
	    (set-process-sentinel connection 'url-http-end-of-document-sentinel)
	    (process-send-string connection (url-http-create-request)))))))

Как видно, в зависимости от статуса connection (статусы можно посмотреть в C-h f process-status) формирование заголовков (функция url-http-create-request) происходит либо в url-http-async-sentinel в случае статуса 'connect, которая вызывается не из url-retrieve, либо же формирование заголовков здесь же (самый последний вариант cond в коде, когда, например, status уже 'open).

Исправление Zubok, :

Почему тогда у тебя при let связывании (url-privacy-level '(agent)) работает как нужно

Сработало тогда только https, на самом деле. Я плохо поставил эксперимент. А через http не сработало.

У меня еще вот такой код нормально сработал:

У меня такой код не сработал на http и сработал на https. Я попробовал и example.com, и другие адреса. У меня версия здесь - гонки. В одном случае будет работать, а в другом не будет. Причем еще интересные эффекты возникают, если несколько одинаковых запросов друг за другом сделать: иногда срабатывает '(agent) и 'paranoid. Кусок исходного кода намекает на это:

	(let ((status (process-status connection)))
	  (cond
	   ((eq status 'connect)
	    ;; Asynchronous connection
	    (set-process-sentinel connection 'url-http-async-sentinel))
	   ((eq status 'failed)
	    ;; Asynchronous connection failed
	    (error "Could not create connection to %s:%d" host port))
	   (t
	    (set-process-sentinel connection 'url-http-end-of-document-sentinel)
	    (process-send-string connection (url-http-create-request)))))))

Как видно, в зависимости от статуса connection (статусы можно посмотреть в C-h f process-status) формирование заголовков (функция url-http-create-request) происходит либо в url-http-async-sentinel, которая вызывается не из url-retrieve, либо же здесь же (самый последний вариант cond в коде, когда, например, status уже 'open).

Исходная версия Zubok, :

Почему тогда у тебя при let связывании (url-privacy-level '(agent)) работает как нужно

Сработало тогда только https, на самом деле. Я плохо поставил эксперимент. А через http не сработало.

У меня еще вот такой код нормально сработал:

У меня такой код не сработал на http и сработал на https. Я попробовал и example.com, и другие адреса. У меня версия здесь - гонки. В одном случае будет работать, а в другом не будет. Причем еще интересные эффекты возникают, если несколько одинаковых запросов друг за другом сделать: иногда срабатывает '(agent) и 'paranoid. Кусок исходного кода намекает на это:

	(let ((status (process-status connection)))
	  (cond
	   ((eq status 'connect)
	    ;; Asynchronous connection
	    (set-process-sentinel connection 'url-http-async-sentinel))
	   ((eq status 'failed)
	    ;; Asynchronous connection failed
	    (error "Could not create connection to %s:%d" host port))
	   (t
	    (set-process-sentinel connection 'url-http-end-of-document-sentinel)
	    (process-send-string connection (url-http-create-request)))))))

Как видно, в зависимости от статуса connection (статусы можно посмотреть в C-h C-f process-status) формирование заголовков (функция url-http-create-request) происходит либо в url-http-async-sentinel, которая вызывается не из url-retrieve, либо же здесь же (самый последний вариант cond в коде, когда, например, status уже 'open).