/// <summary> /// Perform HttpRequest. /// </summary> /// <param name="http_request"></param> /// <param name="send_cookies"></param> /// <returns></returns> public bool Do(HttpRequest http_request, bool send_cookies) { if (AutoRotateProxy) { ChangeProxy(); } int attempt_count = 0; bool rc; while (true) { attempt_count++; rc = _do(http_request, send_cookies); if (rc) { break; } if (Proxy != null) { if (web_routine_status != WebRoutineStatus.EXCEPTION && HWResponse.StatusCode != HttpStatusCode.ProxyAuthenticationRequired && HWResponse.StatusCode != HttpStatusCode.GatewayTimeout && HWResponse.StatusCode != HttpStatusCode.BadGateway ) { break; } Proxies.Delete(Proxy); if (attempt_count >= Properties.Proxy.Default.MaxAttemptCountWithNewProxy) { Log.Error("Attempt quota exeeded: " + attempt_count.ToString()); break; } ChangeProxy(); } if (attempt_count >= MaxAttemptCount) { break; } Log.Write("Attempt #: " + attempt_count.ToString()); } return(rc); }
void close() { lock (This_) { BotCycle.Abort(); if (This.items_xtw != null) { This.items_xtw.WriteEndElement(); This.items_xtw.WriteEndDocument(); This.items_xtw.Close(); } if (This.input_item_queue_name2input_item_queues.Count > 0) { if (This.IsUnprocessedInputItem) { This.set_session_state(SessionState.ABORTED); } else if (This.IsItem2Restore) { This.set_session_state(SessionState.UNCOMPLETED); } else { This.set_session_state(SessionState.COMPLETED); } } This.workflow_xtw.WriteEndElement(); This.workflow_xtw.WriteEndDocument(); This.workflow_xtw.Close(); try { CustomizationApi.SessionClosing(); } catch (Exception e) { LogMessage.Error(e); } try { if (Closing != null) { Closing.Invoke(); } } catch (Exception e) { LogMessage.Error(e); } InputItemQueue.Close(); FileWriter.ClearSession(); Cache.ClearSession(); Proxies.ClearSession(); WebRoutine.ClearSession(); Log.Main.Write("Closing session."); Cliver.Log.ClearSession(); This_ = null; } }
///// <summary> ///// get next proxy from proxy queue ///// </summary> public void ChangeProxy() { this.Proxy = Proxies.Next(); }